如何显示文件内所有文件的前二十行

如何显示文件内所有文件的前二十行

我用它来将“.txt”文件的所有名称放入一个文件中:

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

如何显示 txtfile 中列出的所有文件的所有前 20 行(如果少于 20 行,则提供空行)?

答案1

由于文件名在文件中以换行符分隔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'

相关内容