使用 BASH 或 awk 或 sed 或其他方式删除文件的前两行

Posted

技术标签:

【中文标题】使用 BASH 或 awk 或 sed 或其他方式删除文件的前两行【英文标题】:Deleting the first two lines of a file using BASH or awk or sed or whatever 【发布时间】:2012-02-10 01:51:43 【问题描述】:

我试图通过不将文件打印到另一个文件来删除文件的前两行。我不是在寻找花哨的东西。这是我对 awk 的(失败)尝试:

awk ' (NR > 2) print ' myfile

抛出以下错误:

awk:  NR > 2 print 
awk:          ^ syntax error

例子:

“我的文件”的内容:

blah
blahsdfsj
1 
2
3
4

我想要的结果是什么:

1
2
3
4

【问题讨论】:

【参考方案1】:

你快到了。试试这个:

awk 'NR > 2  print ' myfile

awk 是基于规则的,并且规则在它通过时将执行的块之前显示为裸露(即没有大括号)。

正如 Jaypal 所指出的,在 awk 中,如果您只想打印与规​​则匹配的行,您甚至可以省略该操作,从而将命令简化为:

awk 'NR > 2' myfile

【讨论】:

他也可以在括号前加一个if,尽管你的方式更好,因为它不会参与每一行,只是那些已经匹配的行。 你甚至不需要 print awkish 方式为awk 'NR>2' myfile【参考方案2】:

awk 基于patternaction 语句。在您的情况下,patternNR>2,而您要执行的 actionprint。这个action 也是awkdefault action

所以即使

awk 'NR>2print' filename

会很好,你可以把它缩短为

awk 'NR>2' filename

【讨论】:

【参考方案3】:

使用尾巴:

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】:

怎么样:

tail +3 file

awk 'NR>2' file

sed '1,2d' file

【讨论】:

sed 的另一个变种:sed -n '3,$p' file

以上是关于使用 BASH 或 awk 或 sed 或其他方式删除文件的前两行的主要内容,如果未能解决你的问题,请参考以下文章

使用 sed 或 awk 预处理 C/C++ 代码时如何定位可靠的函数?

如何使用 sed/awk 或其他工具辅助查找和替换 12GB 的颠覆转储文件

shell中 sed或awk 把文件的两个字段调换位置

使用awk或sed卷曲URL中的部分

sed与awk

匹配文件中的字符串并使用 sed 或 awk 打印整个值