awk:非零数量的过滤器未过滤

awk:非零数量的过滤器未过滤,awk,Awk,我以前曾使用awk将一个主要包含零的庞大数据表缩减为一个只包含感兴趣行的较小表(那些没有太多零的行),如下所示: awk -F '\t' '{count=0} {for(i=2; i<30; i++) if($i==0) count++} {if(count<5) print $0}' BigTable > SmallerTable 我把打印行的语法弄错了吗?非常感谢任何建议 将FS=“\t”更改为开始{FS=“\t”}。现在,该赋值的结果是一个真正的条件,它调用打印每一行

我以前曾使用awk将一个主要包含零的庞大数据表缩减为一个只包含感兴趣行的较小表(那些没有太多零的行),如下所示:

awk -F '\t' '{count=0} {for(i=2; i<30; i++) if($i==0) count++} {if(count<5) print $0}' BigTable > SmallerTable 
我把打印行的语法弄错了吗?非常感谢任何建议

FS=“\t”
更改为
开始{FS=“\t”}
。现在,该赋值的结果是一个真正的条件,它调用打印每一行的默认操作

然后将shell脚本更改为:

/usr/bin/awk '
BEGIN { FS="\t" }
{
    # count zeros in female columns
    countF=0
    for(i=2; i<=6; i++) {
        if ($i==0) {
            countF++
        }
    }

    # count zeros in male columns
    countM=0
    for(; i<=NF; i++) {
        if ($i==0) {
            countM++
        }
    }
}
# if fewer than 2/5 females AND more than 3/5 males are zero, print line
countF<2 && countM>3
' "$@"
/usr/bin/awk'
开始{FS=“\t”}
{
#在阴性列中计数零
countF=0
对于(i=2;i将
FS=“\t”
更改为
BEGIN{FS=“\t”}
。此时,该赋值的结果是一个真正的条件,调用打印每一行的默认操作

然后将shell脚本更改为:

/usr/bin/awk '
BEGIN { FS="\t" }
{
    # count zeros in female columns
    countF=0
    for(i=2; i<=6; i++) {
        if ($i==0) {
            countF++
        }
    }

    # count zeros in male columns
    countM=0
    for(; i<=NF; i++) {
        if ($i==0) {
            countM++
        }
    }
}
# if fewer than 2/5 females AND more than 3/5 males are zero, print line
countF<2 && countM>3
' "$@"
/usr/bin/awk'
开始{FS=“\t”}
{
#在阴性列中计数零
countF=0

对于(i=2;我会这么说的,请在您的帖子中也发布预期输出,然后让我们知道。您确定文件中没有空格吗?请尝试:FS=“\t|+”欢迎使用SO,请在您的帖子中也发布预期输出,然后让我们知道。您确定文件中没有空格吗?尝试:FS=“\t|+”哇,谢谢!我采用了一种更简单的方法,并将其分为两个命令,尽管我确实需要硬编码我的参数,这样最终就不那么友好了。下次我会尝试一下。
awk-F'\t'{countM=0}{for(I=12;i10)print$0}'BigTable | awk-F'\t'{countF=0}{for(i=2;我知道,谢谢你!我采用了一种更简单的方法,并将其分为两个命令,尽管我确实需要硬编码我的参数,这样最终就不那么友好了。下次我会尝试一下。
awk-F'\t'{countM=0}{for(i=12;i10)print$0}'BigTable | awk-F'\t'{countF=0}{for(i=2;i)
/usr/bin/awk '
BEGIN { FS="\t" }
{
    # count zeros in female columns
    countF=0
    for(i=2; i<=6; i++) {
        if ($i==0) {
            countF++
        }
    }

    # count zeros in male columns
    countM=0
    for(; i<=NF; i++) {
        if ($i==0) {
            countM++
        }
    }
}
# if fewer than 2/5 females AND more than 3/5 males are zero, print line
countF<2 && countM>3
' "$@"
/usr/bin/awk '
BEGIN { FS="\t" }
FNR==1 {
    for (i=2; i<=NF; i++) {
        sub(/_.*/,"",$i)
        gender[i] = $i
    }
    next
}
{
    for (i=2; i<=NF; i++) {
        count[gender[i]] += ($i==0)
    }
}
count["F"]<2 && count["M"]>3
' "$@"