【发布时间】:2015-03-21 18:31:36
【问题描述】:
当我为此 question 写答案时,我使用了以下内容:
something | sed '$d' | awk '$1>3{print $0}'
例如
- 仅打印第一个字段大于 3 的行 (awk)
- 但省略最后一行
sed '$d'。
这对我来说似乎有点重复的工作,当然只有awk可以做到以上 - 没有sed?
我是一个 awkdiot - 那么,有人可以提出解决方案吗?
【问题讨论】:
标签: awk
当我为此 question 写答案时,我使用了以下内容:
something | sed '$d' | awk '$1>3{print $0}'
例如
sed '$d'。这对我来说似乎有点重复的工作,当然只有awk可以做到以上 - 没有sed?
我是一个 awkdiot - 那么,有人可以提出解决方案吗?
【问题讨论】:
标签: awk
这是您可以做到的一种方法:
$ printf "%s\n" {1..10} | awk 'NR>1&&p>3{print p}{p=$1}'
4
5
6
7
8
9
基本上,打印上一行行的第一个字段,而不是当前行。
正如 Wintermute 在 cmets 中正确指出的那样(谢谢),为了打印整行,您可以将代码修改为:
awk 'p { print p; p="" } $1 > 3 { p = $0 }'
如果第一个字段大于 3,这只会将行内容的内容分配给p。
【讨论】:
awk 'p { print p; p="" } $1 > 3 { p = $0 }',它根据字段的值选择行。 (仍然 +1,因为当然,后面的打印是解决问题的方法)