![파일에 있는 모든 파일의 처음 20줄을 표시하는 방법](https://linux55.com/image/94808/%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%9E%88%EB%8A%94%20%EB%AA%A8%EB%93%A0%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%B2%98%EC%9D%8C%2020%EC%A4%84%EC%9D%84%20%ED%91%9C%EC%8B%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
나는 이것을 사용하여 ".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'