문제

이 스 니펫을 사용하여 찾은 파일 목록에서 상위 10 줄의 AWK 명령을 출력하고 싶습니다.

$ find . -name "*.txt" -print -exec awk '$9 != ""'  \| head -n10 {} \;

또한 처리중인 파일 이름을 인쇄하고 싶습니다.

그러나 왜 그런 오류가 발생했는지 :

awk: cmd. line:2: fatal: cannot open file `|' for reading (No such file or directory)
./myfile.txt

올바른 방법은 무엇입니까?

나는 파이프 전에 백 슬래시없이 시도했다. 여전히 오류가 발생했습니다.

find: missing argument to `-exec'
head: cannot open `{}' for reading: No such file or directory
head: cannot open `;' for reading: No such file or directory
도움이 되었습니까?

해결책

Find의 모든 파일에서 AWK 프로그램을 실행하려면 처음 10 줄만 인쇄합니다. 매번.

$ find . -name "*.txt" -print -exec awk '$9 != "" && n < 10 {print; n++}' {} \;

다른 팁

Find 's -exec으로 명령을 실행할 때 파이프 연산자 (|)와 같은 멋진 쉘을 모두 얻을 수는 없습니다. 그래도 원하는 경우 서브 쉘을 명시 적으로 실행하여 회복 할 수 있습니다.

찾기 . -name '*.txt'-exec /bin /sh -c "echo {} | head -n 15"라는 텍스트 파일;

Ashawley의 답변을 바탕으로 :

find . -name "*.txt" -print -exec awk '$9 != "" {print; if(NR > 9) exit; }' {} \;

10 번째 레코드 후에 Awk를 종료 할 때 더 잘 수행해야합니다.

사용 awk 만 작동해야합니다.

find . -name "*.txt" -print -exec awk '{if($9!=""&&n<11){print;n++}}' {} \;

당신도 이런 식으로 할 수 있습니다 :

find . -name '*txt' -print -exec awk 'BEGIN {nl=1 ;print FILENAME} $9 !="" {if (nl<11) { print $0 ; nl = nl + 1 }}' {}  \;

없이 head.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top