我是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
答案 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