【问题标题】:awk printing against the conditionawk 根据条件打印
【发布时间】:2014-08-14 16:31:05
【问题描述】:

我有一个简单的问题,但我想不通。

我有一个文件,我想打印所有与我在 awk if 条件中指定的条件不匹配的行。但是我可以打印条件,其他的如何工作?

这是我的代码:

awk '{if ($18==0 && $19==0 && $20==0 && $21==0) print $0}' file

我也试过这个:

awk '{if !($18==0 && $19==0 && $20==0 && $21==0) print $0}' file

但第二个不起作用,任何帮助表示赞赏。谢谢。

【问题讨论】:

    标签: awk


    【解决方案1】:

    否定 (!) 需要在括号内:

    awk '{if (!($18==0 && $19==0 && $20==0 && $21==0)) print $0}' file
    

    我们在里面添加另一个集合来包装所有东西。

    (仅供参考,如果您已经给出了它“不起作用”的原因(即! 上的语法错误,那会更有帮助。请记住包括错误消息或某些不适用于将来的症状问题!)

    【讨论】:

    • 谢谢!我刚才也可以这样解决它: awk '{if ($18==0 && $19==0 && $20==0 && $21==0) next;否则打印 $0;}' 文件
    • @user1945881 你可以awk '!(a&&b&&...)' file
    【解决方案2】:

    你也可以反转你的条件语句:

    你想要相反的:

    awk '{if ($18==0 && $19==0 && $20==0 && $21==0) print $0}' file
    

    可以是:

    awk '{if ($18!=0 || $19!=0 || $20!=0 || $21!=0) print $0}' file
    

    awk '{if (!($18==0 && $19==0 && $20==0 && $21==0)) print $0}' file
    

    例子:

    !cat file
    A 0 0 0
    B 1 1 1
    C 1 0 1
    
    awk '$2+$3+$4!=0' file
    B 1 1 1
    C 1 0 1
    
    awk '{if ($2!=0 || $3!=0 || $4!=0) print $0}' file
    B 1 1 1
    C 1 0 1
    
    awk '{if (!($2==0 && $3==0 && $4==0)) print $0}' file
    B 1 1 1
    C 1 0 1
    
    awk '{if (!($2==0 || $3==0 || $4==0)) print $0}' file
    B 1 1 1
    

    【讨论】:

    • 这不起作用,因为如果满足其中任何一个,它将打印,而不是如果所有这些都满足。
    • 会的!你可能误解了这个问题!
    • 如果所有条件都匹配或仅其中一个条件匹配,您希望它打印吗?
    【解决方案3】:

    你可以在这里做:

    awk '$18+$19+$20+$21!=0' file
    

    print $0 不需要,因为它是默认操作。

    【讨论】:

      猜你喜欢
      • 2013-03-04
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      相关资源
      最近更新 更多