使用 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
语句。在您的情况下,pattern
是 NR>2
,而您要执行的 action
是 print
。这个action
也是awk
的default 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++ 代码时如何定位可靠的函数?