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 firstawk
命令仅当两列都是时才打印一行,您还可以使用nextawk'{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