【问题标题】:print every nth line into a row using gawk使用 gawk 将每 n 行打印成一行
【发布时间】:2012-04-15 16:04:39
【问题描述】:

我有一个非常大的文件,我需要在其中获取每 n 行并将其打印成一行。

我的数据:

1      937  4.320194
2      667  4.913314
3      934  1.783326
4      940  -0.299312
5      939  2.309559
6      936  3.229496
7      611  -1.41808
8      608  -1.154019
9      606  2.159683
10     549  0.767828

我希望我的数据如下所示:

1      937  4.320194
3      934  1.783326
5      939  2.309559
7      611  -1.41808
9      606  2.159683

这当然是一个例子,我希望我的大数据文件每隔 10 行。到目前为止我尝试过这个:

 NF == 6 {
     if(NR%10) {print;}
     }

【问题讨论】:

    标签: printing awk line gawk


    【解决方案1】:

    这不是 (g)awk,但它会起作用:

    cat myfile | grep ^[[:digit:]]*0[[:blank:]] 应该可以解决问题。

    【讨论】:

      【解决方案2】:

      每隔一行打印一次,从第一行开始:

      awk 'NR%2==1' file.txt
      

      每隔十行打印一次,从第十行开始:

      awk 'NR%10==0' file.txt
      

      要在脚本中使用它,请将以下内容添加到名为 script.awk 的文件中:

      BEGIN {
          print "Processing file"
      }
      
      NR%10==0
      
      END {
          print "Finished processing"
      }
      

      然后执行:

      awk -f script.awk file.txt
      

      【讨论】:

      • 不应该是awk 'NR%10==0' file.txt吗?
      • @D.Shawley 是的,你是对的。我真的应该在回答之前通读一遍!干杯!
      • 非常感谢,我知道这是一个简单的问题,但我一辈子都想不通。
      • 如果有在脚本中执行这个?
      • HTH。此外,您不需要 BEGIN 或 END 块。
      【解决方案3】:

      小菜一碟:cat test.txt | awk 'NR % 10 == 1'

      【讨论】:

      • 每 10 行打印一行 - 第 1、11、21、31 行等。您需要模数为零而不是 1 的行。
      • 嗯,为什么?这也每 10 行打印一次,从第一行开始,它与示例中给出的内容相匹配。
      【解决方案4】:

      使用sed,您可以使用first~step 命令非常轻松地对此进行很多修改。例如:

      # Odd lines
      sed -n 1~2p file
      # Every tenth line (10, 20, 30, ...)
      sed -n 10~10p file
      # Every tenth line (1, 11, 21, ...)
      sed -n 1~10p file
      # First plus every tenth (1, 10, 20, 30, ...)
      sed -n -e 1p -e 10~10p file
      

      【讨论】:

      【解决方案5】:

      直接在命令提示符中执行 (Windows)。

      将gawk.exe文件放到文件所在的文件夹中,在文件夹中启动命令Prompt,写入

      gawk "NR%n==x" oldfile.txt>newfile.txt
      

      n 是您要打印的每第 n 行,x 是起始行。

      例如 n=10 和 x=1,打印第 1,11,21,31,41 行......从原始文件到新文件的结束行。

      例如 n=20 和 x=5,打印第 5,25,45,65 行......从原始文件到新文件的结束行。

      【讨论】:

        猜你喜欢
        • 2015-03-06
        • 2020-03-01
        • 2012-01-16
        • 2013-08-04
        • 2013-08-23
        • 1970-01-01
        • 2018-11-13
        • 2018-09-04
        • 1970-01-01
        相关资源
        最近更新 更多