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列に0より大きい値が2つ以上ある行だけを維持したいと思います。したがって、上記の例で保持したい行は2、6、8行です。つまり、列5から8に0が3つ以上ある場合は、その行を削除する必要があります。

問題は、列9が列5-8をマージした結果であるため、パターンマッチングにも使用できることです。ただし、以前と同様に、パターンが3つの連続ゼロである必要はありません。 4つの値のうち0が3つ以上ある必要があります。

答え1

1つの方法は次のとおりです。

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

Cハッキングのきちんとしたバリエーションもあります。

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

関連情報