0

我有一个制表符分隔的文件,其中从第 10-25 列开始,一些值包含“。” 特点。我想过滤掉与“。”匹配的行。字符,在此列的列范围内,因此如果在第 10-25 列中找到的次数少于 8 次(即出现次数少于 50%),则不会打印。

我曾尝试查看类似的帖子,最接近的是用户: lodge(在同一行中匹配具有模式 n 次的行)但是,当我尝试某些命令时,它的行为方式与我不同需要。

例如,下面的代码用点替换了所有内容......虽然我知道这是因为它是全局替换,但它似乎适用于 lodge。

    awk '{ if (gsub(/./, ".") >= 8) print }' merged.vcf > test.vcf 

这是我的文件的一个例子(在这个例子中我只包括第 11 列):

    #CHROM  POS  ID  REF ALT QUAL    FILTER  INFO    FORMAT  AD0062-C AD0065-C
      2L     560 .   T   C   30.65   PASS    AC=3    GT:GQ:PL    .       .
      2L     595 .   G   T   61.75   PASS    AC=11   GT:GQ:PL    .   0/1:13:132,0,10 
4

1 回答 1

4

如果您想检查第 10 - 25 列是否完全正确.,请执行以下操作:

awk '{c=0; for( i = 10; i <= 25; i++ ) c += $i ~ /^\.$/;
    if( c >= 8 ) print }' input

如果您只关心这些列是否包含 a .,请忽略^and $

于 2012-07-24T15:29:19.557 回答