从文件名以awk打印多个文件中的两行

时间:2017-06-22 08:19:38

标签: linux awk

我在目录中有多个文件。我想从所有这些文件中提取某些行并打印到输出文件。

File1中

line1
line2 
line3
line4

文件2

line1
line2 
line3
line4

并且喜欢这样我有很多文件。 期望的输出

File1
line2
line4
File2
line2
line4

我试过

awk 'FNR==2 {print FILENAME, $0}' *.txt

这只打印第2行。我也试过FNR==2 & 4如何在这里打印两行?我很感激任何帮助!

3 个答案:

答案 0 :(得分:2)

我认为这就是你想要的:

awk 'FNR == 1 { print FILENAME } FNR == 2 || FNR == 4' *.txt

在每个文件的开头,打印文件名。然后打印,当行号为2或4时。

答案 1 :(得分:1)

我认为您应该将命令修改为

awk 'FNR==1{print FILENAME} (FNR==2||FNR==4) {print $0}' *.txt
1.txt
line2 
line4
2.txt
line2 
line4

答案 2 :(得分:1)

如果您有GNU sed

,只是为了好玩
$ sed -sn '1F;2p;4p' *.txt
file1.txt
line2 
line4
file2.txt
line2 
line4
  • -s分别处理输入文件,以便它们各自拥有自己的地址
  • -n禁用自动打印
  • 1F如果行号是一个
  • 则打印文件名
  • 2p;4p打印第2行和第4行