如何筛选TSV文件中第二列非PASS元素数量大于1的行?
解决方法
用awk就能实现这个需求,核心逻辑是拆分第二列的分号分隔字段,统计非PASS的元素数量,只保留数量大于1的行。
具体命令如下:
awk -F'\t' '{ count = 0 split($2, parts, /;/) for (idx in parts) { if (parts[idx] != "PASS") { count++ } } if (count > 1) { print $0 } }' myfile.tsv
命令细节说明
-F'\t':指定TSV文件的字段分隔符为制表符(TSV标准是制表符分隔,确保准确识别第二列)。如果你的测试用例实际是空格分隔,可以把-F'\t'改成-F' '。split($2, parts, /;/):把第二列的内容按分号;拆分成数组parts,每个数组元素对应一个子字符串。- 循环遍历数组
parts,每碰到不等于PASS的元素,就给计数器count加1。 - 最后判断如果
count大于1,就输出当前整行内容($0代表整行)。
示例验证
用你提供的输入测试,这个命令会输出:
ID1 PASS;mq;bq ID4 mq;hj;cigar ID6 bq;hj;PASS;PASS
完全符合期望结果。
内容的提问来源于stack exchange,提问作者Jeni
相关产品推荐
相关产品推荐

