For loop 用于隔离行的awk for循环语法

For loop 用于隔离行的awk for循环语法,for-loop,awk,For Loop,Awk,我有一个如下所示的输入文件: 1 Gene1 0.4 0.0009 2 Gene2 0.0003 0.00004 3 Gene3 0.04 0.9 4 Gene4 0.0009 0.00002 5 Gene5 0.8 0.00003 我希望隔离第三($3)和第四($4)字段小于或等于0.01的行 我用过: awk -F"\t" '{ if ($3<=0.01 && $4<=0.01) print $0

我有一个如下所示的输入文件:

1   Gene1   0.4     0.0009
2   Gene2   0.0003  0.00004
3   Gene3   0.04    0.9
4   Gene4   0.0009  0.00002
5   Gene5   0.8     0.00003
我希望隔离第三($3)和第四($4)字段小于或等于0.01的行

我用过:

awk -F"\t" '{ if ($3<=0.01 && $4<=0.01) print $0 }' input

awk-F“\t”{如果($3字段
i
的值是
$i
。因此,替换:

awk -F"\t" '{ for (i=3; i<=NF; i++) if (i<=0.01) print $0 }' input

或者,也可以这样做,但仅使用
如果所有字段都有给定值,或者其中一个字段有给定值,或者其他组合,则不清楚是否要打印该行,但类似的操作可能会以任何方式工作:

awk '
{
    cnt = 0
    for (i=3; i<=NF; i++) {
        cnt += (($i)+0 <= 0.01 ? 1 : 0)
    }
}
cnt { print "at least one true:", $0 }
cnt == (NF-3) { print "all true:", $0 }
' file
awk'
{
cnt=0

对于(i=3;iYour first
awk
命令仅当两列都是
时才打印一行,您还可以使用next
awk'{for(i=3;i0.01)next}1’
大家好,这些代码很好用,谢谢!我只是在理解语法的含义上有点困难:如果我想保留小于或等于0.01的值,为什么代码中的$I>0.01?再次感谢。@rish如果你想打印所有值都小于或等于0.01的行,那么,根据逻辑定律,这就是我表示您要打印的行的值不大于0.01。这就是代码中的
$i>0.01
的方式。如果您愿意,我只添加了一个仅使用

awk -F"\t" '{ for (i=3; i<=NF; i++) if ($i<=0.01) print $0 }' input
$ awk '{f=0; for (i=3; i<=NF; i++) if ($i<=0.01)f=1;} f' input
1   Gene1   0.4     0.0009
2   Gene2   0.0003  0.00004
4   Gene4   0.0009  0.00002
5   Gene5   0.8     0.00003
$ awk '{f=1; for (i=3; i<=NF; i++) if ($i>0.01)f=0;} f' input
2   Gene2   0.0003  0.00004
4   Gene4   0.0009  0.00002
$ awk '{f=1; for (i=3; i<=NF; i++) f = f && ($i<=0.01);} f' input
2   Gene2   0.0003  0.00004
4   Gene4   0.0009  0.00002
awk '
{
    cnt = 0
    for (i=3; i<=NF; i++) {
        cnt += (($i)+0 <= 0.01 ? 1 : 0)
    }
}
cnt { print "at least one true:", $0 }
cnt == (NF-3) { print "all true:", $0 }
' file