打印特定的文件编号行列表

时间:2014-07-27 19:45:36

标签: bash awk sed grep

大家好日子,

今天,我想知道如何打印不同文件的相同数字行。

打印 特定 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行。

非常感谢你提出任何线索。

4 个答案:

答案 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行。