我有一个非常庞大的文件,我需要获取每个第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;}
}
答案 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行从原始文件打印到新文件中。