2012-09-21 27 views
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 Saravananķ

更新#1 - 2012年9月21日 - 下午十點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 

更新#9月2日至21日2012 - 下午10時55分 - 封閉

我試圖rmunoz想法有一些調整。它像魔術一樣工作。感謝rmunoz,這個我關閉這個主題

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

回答

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 
+0

感謝您的指針。我能夠打印第62行,第152行,第153行,但是在打印第62 + 217,#152 + 217,#152 + 217等下一個迭代時出現問題。 (NR == 152 || NR == 152 || NR == 153)&&(((NR-62)%217 == 0)||((NR-152)%217 == 0) |((NR-153)%217 == 0)){print $ 0;}'test.txt它也不能正常工作。將繼續調查 –

+0

好的,我知道你只想要62,152,152和%127行。 我要編輯我的答案,打印行%(62 + 127),行%(152 + 127).. – arutaku

+0

我用你的想法做過操作。下面是我想要的。謝謝!你是天使。 awk'(NR - 62)%217 == 0 || (NR - 152)%217 == 0 || (NR - 153)%217 == 0 {print $ 0;}'file.txt –