我有一个制表符分隔文件,其中从第10-25列开始,某些值包含“。”字符。我想过滤掉与“。”匹配的行。在该列列范围内的字符,如果在列10-25中发现少于8x次(即少于50%出现),则不打印。
我已经尝试过查看类似的帖子,而我最接近的是用户:lodge(Match lines with pattern n times in the same line)然而,当我尝试了一些命令时,它的行为并不像我需要的那样
例如,下面的代码用点替换了所有内容......虽然我知道这是因为它是一个全局替换,但似乎适用于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
答案 0 :(得分:4)
如果要检查列10 - 25是否正好.
,请执行:
awk '{c=0; for( i = 10; i <= 25; i++ ) c += $i ~ /^\.$/;
if( c >= 8 ) print }' input
如果您只关心这些列包含.
,请忽略^
和$
。