我有一个非常大的文件,我需要获取每个第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;}
}
要打印每一行,从第一行开始:
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
使用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
一块蛋糕:cat test.txt | awk 'NR % 10 == 1'
这不是(g)awk,但它会起作用:
cat myfile | grep ^[[:digit:]]*0[[:blank:]]
应该做的伎俩。
直接在命令提示符(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 ......从原始文件到新文件的结束行。