我想删除一个文件的前两行,通过不将它们打印到另一个文件。我不需要什么高级的东西。这是我的 awk 尝试(失败了):
awk '{ (NR > 2) {print} }' myfile
这会抛出以下错误:
awk: { NR > 2 {print} }
awk: ^ syntax error
例子:
'myfile' 的内容:
blah
blahsdfsj
1
2
3
4
我希望得到的结果是什么:
1
2
3
4
使用 tail 命令:
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
那么这样怎么样:
tail +3 file
或者
awk 'NR>2' file
或者
sed '1,2d' file
你已经快成功了,尝试用这个方法代替:
awk 'NR > 2 { print }' myfile
awk是基于规则的,规则通常出现在要执行的语句块之前,并且不带花括号。
而且,正如Jaypal指出的那样,在awk中,如果您只想打印与规则匹配的行,则甚至可以省略动作,从而简化命令:
awk 'NR > 2' myfile
if
,但是你的方法更好,因为它不会涉及每一行,只涉及已经匹配的行。 - Dan Fego{ print }
。一种 awkish
的方式是 awk 'NR>2' myfile
。 - jaypal singhawk
是基于 pattern{action}
语句的。在你的情况下,pattern
是 NR>2
,你想要执行的 action
是 print
。这个 action
也是 awk
的默认操作
。
因此,即使
awk 'NR>2{print}' filename
可以正常工作,你也可以缩短它为
awk 'NR>2' filename
。
sed -n '3,$p' file
- anubhava