大家好日子,
今天,我想知道如何打印不同文件的相同数字行。
打印 特定 a 文件行的传统方法是:
# Print line number 52
sed -n '52p' # method 1
sed '52!d' # method 2
sed '52q;d' # method 3
但是,当我想使用它时:
sed '52q;d' Files*
它仅打印以: Files 开头的第一个文件的第52行。
非常感谢你提出任何线索。
答案 0 :(得分:4)
您可以使用awk打印文件列表中的第52行,如下所示:
awk 'FNR==52' Files*
内置变量FNR
是当前文件的当前记录号。使用默认记录分隔符,这对应于行号。当FNR等于52时,表达式的计算结果为true,因此awk会打印该行。
它可能是一个过早的优化,但您可能还想跳到下一个文件而不是在第52个之后处理所有行。在GNU awk中,可以使用nextfile
语句来完成:
awk 'FNR==52 {print; nextfile}' Files*
答案 1 :(得分:1)
通过xargs
对其进行管道,以便通过sed
运行每个文件。请注意参数-n 1
使xargs
一次只能将一个参数传递给sed
。
ls Files* | xargs -n 1 sed -n '52p'
答案 2 :(得分:0)
您可以使用head
命令轻松查看文件的前n行:
ls Files* | xargs head -n 52
答案 3 :(得分:0)
q
中的{p> sed '52q;d' Files*
会在第一个文件的第52行生成sed
退出 ,所以很自然它只会打印出来前52行。