
Eu tenho um "script" awk que soma a coluna 3, depois a 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 infile ficaria 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 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 por outras perguntas aqui que às vezes o awk produz coisas que não estão em ordem. Meu problema é que não consigo corrigir isso usando as respostas anteriores fornecidas neste fórum, pois meu entendimento do awk não é nada bom e meu "script" já é bastante complicado para mim.
Você poderia me informar como posso corrigir isso?
Muito obrigado!
Responder1
Apenas canalize a saída do seu comando awk
to sort
, mas acrescente o cabeçalho após awk
o processamento.
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)