corrigindo o script awk para ter saída na ordem correta

1

Eu tenho um "script" awk que soma a coluna 3, depois 4, para cada valor na coluna 1 e quando a coluna 2 > 0:

awk 'BEGIN { print "Target covered_bases percentage_covered" } {FS = "\t" } $2 > 0 { n[$1]++; covered_bases[$1] += $3 ;percentage_covered[$1] += $4 } END { for (i in n) { print i,covered_bases[i],percentage_covered[i] } }' $1

Meu infil seria assim:

S 0 20 0.2
S 1 300 0.7
S 2 10 0.1
D 0 10 0.3
D 1 20 0.6
D 2 2  0.02
D 3 5  0.034

E assim por diante, digamos que Z. A saída aqui seria:

Target covered_bases percentage_covered
S 310 0.8
D 27  0.654

Então está tudo bem. No entanto, as letras são exibidas na ordem errada. Eu sei de outras perguntas aqui que o awk às vezes imprime coisas que não estão em ordem. Meu problema é que eu não consigo corrigir isso usando respostas anteriores dadas neste fórum como o meu entendimento do awk não é grande em tudo e meu "script" já é bastante complicado na minha mente.

Você poderia me informar como posso corrigi-lo?

Muito obrigado!

    
por Agathe 13.01.2017 / 16:49

1 resposta

0

Apenas direcione a saída de seu comando awk to sort , mas anexe o cabeçalho após awk processing.

awk '{FS = "\t" } $2 > 0 {
    n[$1]++;
    covered_bases[$1] += $3;
    percentage_covered[$1] += $4;
}
END {
    for (i in n) {
        print i,covered_bases[i],percentage_covered[i];
    }
}' $1 | sort | (echo 'Target covered_bases percentage_covered' && cat)
    
por 13.01.2017 / 18:24

Tags