2012-01-13 90 views
20

我試圖通過不將其打印到另一個文件來刪除文件的前兩行。我不是在尋找某種奇特的東西。這是我的(失敗)的嘗試在AWK:使用BASH或awk或sed或其他方法刪除文件的前兩行

awk '{ (NR > 2) {print} }' myfile 

拋出了以下錯誤:

awk: { NR > 2 {print} } 
awk:  ^syntax error 

例: 'MYFILE' 的

內容:

blah 
blahsdfsj 
1 
2 
3 
4 

什麼我想要的結果是:

1 
2 
3 
4 

回答

51

使用尾巴:

tail -n+3 file 

從該名男子頁:

-n, --lines=K 
      output the last K lines, instead of the last 10; or use -n +K 
      to output lines starting with the Kth 
+4

應該是+3(從第三行開始)... – cmbuckley 2012-01-13 21:57:11

+0

需要'tail -n + 3 file',但是謝謝! – Amit 2012-01-13 21:58:33

16

你就要成功了。嘗試這個代替:

awk 'NR > 2 { print }' myfile 

AWK是基於規則和規則如果它通過它woud執行塊之前出現裸(即,沒有括號)。

另外,作爲Jaypal指出,在awk中,如果你想要做的就是打印匹配的規則,你甚至可以省略動作線,從而簡化了命令:

awk 'NR > 2' myfile 
+0

他也可以在括號之前加一個'if',雖然你的方法比較好,因爲它並不涉及每一行,只是那些已經匹配的行。 – 2012-01-13 21:55:19

+1

你甚至不需要'{print}'。 'awkish'的方式是'awk'NR> 2'myfile' – 2012-01-13 22:39:31

20

如何:

tail +3 file 

OR

awk 'NR>2' file 

OR

sed '1,2d' file 
+1

sed的另一個變種:'sed -n'3,$ p'file' – anubhava 2012-01-14 13:06:36

4

awk是基於pattern{action}聲明。在你的情況下,patternNR>2和你想要執行的actionprint。此action也是awkdefault action

因此,即使

awk 'NR>2{print}' filename

將做工精細,可以縮短到

awk 'NR>2' filename

相關問題