awk condicional através de 4 colunas

1

Eu tenho um arquivo delimitado por tabulação com 9 colunas da seguinte forma:

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

Gostaria de manter apenas as linhas onde há pelo menos dois valores acima de zero em qualquer uma das colunas 5,6,7,8. Portanto, no exemplo acima, as linhas que quero manter são linhas 2,6,8. Em outras palavras, se houver pelo menos 3 zeros na coluna 5-8, a linha deve ser descartada.

O problema é que a coluna 9 é o produto das colunas de mesclagem 5-8, portanto, pode ser usada para a correspondência de padrões também; no entanto, como antes, o padrão não é necessariamente 3 zeros consecutivos. Só tem que haver pelo menos 3 zeros dos 4 valores.

    
por aish1249 14.05.2015 / 02:03

1 resposta

2

Aqui está uma abordagem:

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

E uma variante terser para os hackers C:

awk -F $'\t' '(!!$5+!!$6+!!$7+!!$8)>=2'
    
por 14.05.2015 / 02:07

Tags