파일에 있는 모든 파일의 처음 20줄을 표시하는 방법

파일에 있는 모든 파일의 처음 20줄을 표시하는 방법

나는 이것을 사용하여 ".txt" 파일의 모든 이름을 하나의 파일에 넣습니다.

find . -name "*.txt" | sort > txtfile

txtfile에 나열된 모든 파일의 처음 20줄을 모두 표시하는 방법(또는 20줄 미만인 경우 빈 줄을 제공)은 무엇입니까?

답변1

파일 이름은 file 에서 줄 바꿈으로 구분되므로 txtfile각 파일을 읽고 줄 수가 같은지(또는 20보다 큰지) 확인하고, 그렇다면 처음 20줄을 인쇄하고, 그렇지 않으면 나머지 줄의 줄 바꿈을 인쇄할 수 있습니다. :

while IFS= read -r f; do 
    lines=$(wc -l <"$f")
    if (( lines < 20 )); then
        cat -- "$f" 
        for ((i=20; i>lines; i--)); do 
            echo
        done
    else 
        head -20 -- "$f"
    fi
done <txtfile

답변2

awk이를 지원하는 규칙이 있는 경우 ENDFILE다음을 수행할 수 있습니다.

xargs -a txtfile awk 'FNR <= 20 {print} ENDFILE {for (n=FNR+1;n<=20;n++) print ""}'

각 파일에 헤더가 있는 것이 마음에 들지 않으면 pr"페이지"를 사용하여 각 파일의 처음 20줄을 인쇄 할 수 있습니다.

xargs -a txtfile pr +1:1 -l25

(안타깝게도 pr헤더를 억제하는 옵션이 있지만 해당 옵션은 페이지 매김도 억제합니다). 만약 너라면하다헤더에 주의를 기울이면 파일을 개별적으로 처리하고 tail다음을 사용하여 삭제할 수 있습니다.

while read -r f; do 
  pr +1:1 -l25 "$f" | tail -n +6
done < txtfile

또는 (GNU sed의 "nskipm" 주소 지정 사용)

xargs -a txtfile pr +1:1 -l25 | sed '1~25,+4d'

관련 정보