【问题标题】:print two lines from multiple files with the file name in awk使用 awk 中的文件名从多个文件中打印两行
【发布时间】:2017-06-22 17:28:27
【问题描述】:

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

文件1

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 & 4How do i do i print two lines here?非常感谢任何帮助!

【问题讨论】:

    标签: linux awk


    【解决方案1】:

    我认为这就是你想要的:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 好的,我只是更正了他问题中的逻辑,已经更正了答案。谢谢@TomFenech
      【解决方案3】:

      如果你有GNU sed,只是为了好玩

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

      【讨论】:

        猜你喜欢
        • 2017-04-18
        • 2016-07-30
        • 2016-07-30
        • 1970-01-01
        • 2014-12-03
        • 1970-01-01
        • 2017-10-09
        • 2013-08-23
        • 1970-01-01
        相关资源
        最近更新 更多