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

问题描述 投票:20回答:5

我有一个非常大的文件,我需要获取每个第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
5个回答
48
投票

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

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

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

9
投票

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


2
投票

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

cat myfile | grep ^[[:digit:]]*0[[:blank:]]应该做的伎俩。


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 ......从原始文件到新文件的结束行。

© www.soinside.com 2019 - 2024. All rights reserved.