我有一个包含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
答案 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