2012-04-01 45 views
11

我有一個非常大的文件,我需要獲取每行第n行並將其打印成一行。使用gawk將每第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;} 
    } 

回答

33

要打印每一第二行,始於第一:

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

不應該是'awk'NR%10 == 0'file.txt'? – 2012-04-01 22:37:32

+0

@ D.Shawley是的,你是對的。我應該在回答之前真正閱讀所有內容!乾杯! – Steve 2012-04-01 22:46:14

+0

非常感謝,我知道這是一個簡單的問題,但我無法想象出我的生活。 – user1269741 2012-04-01 22:52:49

2

這不是(G)的awk,但它會工作:

cat myfile | grep ^[[:digit:]]*0[[:blank:]]應該做的伎倆。

9

海賊王:cat test.txt | awk 'NR % 10 == 1'

+1

+1。 :) – sarnold 2012-04-01 22:37:09

+0

打印每10行之後的行 - 第1行,第11行,第21行,第31行等。您希望模數爲零而不是1的行。 – 2012-04-02 09:09:05

+2

那麼,爲什麼?這也會打印每第10行,從第一行開始,並與作爲示例給出的內容相匹配。 – 2012-04-02 11:42:11

10

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

在這裏使用'sed'很好用+1! – Steve 2012-04-02 00:20:54

+0

在Mac OS X上我得到'無效的命令代碼〜'。任何想法爲什麼? – Gerard 2013-10-17 11:33:56

+1

@Gerard See:https://stackoverflow.com/questions/30003570/how-to-use-gnu-sed-on-mac-os-x – arielf 2016-01-14 00:58:20