跨 4 列的条件 awk

跨 4 列的条件 awk

我有一个包含 9 列的制表符分隔文件,如下所示:

1   25555818    T   14  0   0   0   14  0:0:0:14
2   25555819    T   14  7   0   0   7   7:0:0:7
3   25555820    G   13  0   0   13  0   0:0:13:0
4   25555821    A   0   0   0   0   0   0:0:0:0
5   25555822    G   11  0   0   11  0   0:0:0:0
6   25555823    T   11  2   0   0   9   2:0:0:9
7   25555824    T   11  0   0   0   11  0:0:0:11
8   25555825    G   11  5   0   3   3   5:0:3:3

我想仅保留第 5、6、7、8 列中至少有两个大于零的值的行。所以在上面的例子中,我想要保留的行是第 2,6,8 行。换句话说,如果第 5-8 列中至少有 3 个零,则应丢弃该行。

问题是第 9 列是合并第 5-8 列的产物,因此它也可以用于模式匹配;然而,与之前一样,该模式不一定是 3 个连续的零。 4 个值中必须至少有 3 个零。

答案1

这是一种方法:

awk 'BEGIN{FS="\t"} (($5!=0)+($6!=0)+($7!=0)+($8!=0))>=2'

还有一个针对 C 黑客的简洁变体:

awk -F $'\t' '(!!$5+!!$6+!!$7+!!$8)>=2'

相关内容