4

我是 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 萨拉瓦南 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
4

1 回答 1

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
于 2012-09-21T21:28:39.820 回答