我用它来将“.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'