如何根据超过1列条件删除行

时间:2015-11-24 13:58:17

标签: linux awk

我有一个包含12列的文件,我想删除同时在第4,5,6,7,8,9,10,11和12列中具有0值的行。

我写了这段代码,但它不起作用:

cat Combined_PromoterAnalysis.bed |\
 awk -F "" '{ if ($4==0,$5==0,$6==0,$7==0,$8==0,$9==0,$10==0,$11==0,$12==0)  print $0 }' > Modified.bed 

1 个答案:

答案 0 :(得分:3)

您需要检查一切是否正确。为此,您需要说condition1 && condition2 ...

这将打印所有这些文件中至少有一个不是0的行:

awk -F "" '!($4==0 && $5==0 && $6==0 && $7==0 && $8==0 && $9==0 && $10==0 && $11==0 && $12==0)' file

但是,最好循环浏览这些字段并在其中一个字段不是0时打印该行:

awk '{for (i=4;i<=12;i++) if ($i!=0) {print; next}}' file

这些值可以是负数吗?因为如果它们都是正数,您可以检查总和是否为0

awk -F "" '$4+$5+$6+$7+$8+$9+$10+$11+$12' file
相关问题