2012-01-13 172 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