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

时间:2012-04-01 22:30:25

标签: 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

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

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;}
     }

5 个答案:

答案 0 :(得分:47)

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

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

答案 1 :(得分:15)

使用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

答案 2 :(得分:9)

小蛋糕:cat test.txt | awk 'NR % 10 == 1'

答案 3 :(得分:2)

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

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

答案 4 :(得分:0)

直接在命令提示符(Windows)中进行操作。

将gawk.exe文件放置在该文件所在的文件夹中,并在该文件夹中启动命令提示符,然后编写

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行从原始文件打印到新文件中。