【问题标题】:awk - skip last line for conditionawk - 跳过最后一行的条件
【发布时间】:2015-03-21 18:31:36
【问题描述】:

当我为此 question 写答案时,我使用了以下内容:

something | sed '$d' | awk '$1>3{print $0}'

例如

  • 仅打印第一个字段大于 3 的行 (awk)
  • 但省略最后一行sed '$d'

这对我来说似乎有点重复的工作,当然只有awk可以做到以上 - 没有sed

我是一个 awkdiot - 那么,有人可以提出解决方案吗?

【问题讨论】:

    标签: awk


    【解决方案1】:

    这是您可以做到的一种方法:

    $ 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

    【讨论】:

    • 这仅在该行包含单个数字时才有效。在 OP 的情况下,这似乎不是问题,但无论如何请允许我保留修改后的版本 awk 'p { print p; p="" } $1 > 3 { p = $0 }',它根据字段的值选择行。 (仍然 +1,因为当然,后面的打印是解决问题的方法)
    猜你喜欢
    • 2012-08-05
    • 2015-01-20
    • 1970-01-01
    • 2016-10-04
    • 2011-12-08
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    相关资源
    最近更新 更多