使用gawk将每第n行打印成一行

use*_*741 21 printing awk line gawk

我有一个非常大的文件,我需要获取每个第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
Run Code Online (Sandbox Code Playgroud)

我希望我的数据看起来像这样:

1      937  4.320194
3      934  1.783326
5      939  2.309559
7      611  -1.41808
9      606  2.159683
Run Code Online (Sandbox Code Playgroud)

这当然是一个例子,我想要我的巨大数据文件的每10行.到目前为止我试过这个:

 NF == 6 {
     if(NR%10) {print;}
     }
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 48

要打印每一行,从第一行开始:

awk 'NR%2==1' file.txt
Run Code Online (Sandbox Code Playgroud)

要打印每十行,从第十行开始:

awk 'NR%10==0' file.txt
Run Code Online (Sandbox Code Playgroud)

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

BEGIN {
    print "Processing file"
}

NR%10==0

END {
    print "Finished processing"
}
Run Code Online (Sandbox Code Playgroud)

然后执行:

awk -f script.awk file.txt
Run Code Online (Sandbox Code Playgroud)


Kev*_*vin 16

有了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
Run Code Online (Sandbox Code Playgroud)


Joh*_*ski 9

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

  • 那么,为什么?这也打印每一行,从第一行开始,它与作为示例给出的匹配. (2认同)