在大文件中打印选定的行

时间:2012-09-21 21:23:10

标签: awk

我是AWK的新手。

我有一个大文本文件(> 3GB)。喜欢使用AWK行命令按顺序提取/打印选定的行(第62行,第152行和第153行),并且每217行重复一次,直到文件中的记录结束。

试图从网上搜索和学习。尝试以下,它似乎没有工作,

awk '{(for (i=62; i<=NR; i=i+217)||for (i=62; i<=NR; i=i+217)||for (i=62; i<=NR; i=i+217)); print}' file.txt

count=62||152||153
awk '{if (++count%217==0) print;}' file.txt

你能帮忙给我一些指示或引导我去任何可能有帮助的网站。

我正在使用此http://www.catonmat.net/blog/wp-content/uploads/2008/09/awk1line.txt来学习。

RGDS Saravanan K

更新#1 - 2012年9月21日 - 晚上10点40分

尝试

awk 'NR == 62 || NR == 152 || NR == 153 || NR % 217 == 0 {print $0;}' file.txt

能够打印#62,#152和#153行,但不能完成以下所有迭代,例如#(62 + 217),#(152 + 217)和#(153 + 217)等等。

也试过以下,但效果不好。

awk '(NR == 62 || NR == 152 || NR == 153) && (((NR-62) % 217==0) || ((NR-152) % 217 ==0)|| ((NR-153) % 217==0)) {print $0;}' file.txt

更新#2 - 2012年9月21日 - 晚上10点55分 - 已关闭

我通过一些调整尝试了rmunoz的想法。它像魔术一样工作。感谢rmunoz,关闭这个话题

awk '(NR - 62) % 217 == 0 || (NR - 152) % 217 == 0 || (NR - 153) % 217 ==0 {print $0;}' file.txt

1 个答案:

答案 0 :(得分:5)

您可以这样使用AWK中的模式:

 awk 'NR == 62 || NR == 152 || NR == 153 || NR % (62+217) == 0 || NR % (152+217) == 0 || NR % (153+217) == 0 {print $0;}' test.txt