
Tengo un "script" awk que suma la columna 3, luego la 4, para cada valor en la columna 1 y cuando la columna 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
Mi archivo sería así:
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
Y así sucesivamente, digamos Z. El resultado aquí sería:
Target covered_bases percentage_covered
S 310 0.8
D 27 0.654
Entonces esto está bien. Sin embargo, las letras aparecen en el orden incorrecto. Sé por otras preguntas aquí que awk a veces genera cosas que no están en orden. Mi problema es que parece que no puedo corregir esto usando las respuestas anteriores dadas en este foro, ya que mi comprensión de awk no es nada buena y mi "script" ya es bastante complicado en mi opinión.
¿Podrías indicarme cómo puedo corregirlo?
¡Muchas gracias!
Respuesta1
Simplemente canalice la salida de su awk
comando sort
pero agregue el encabezado después awk
del procesamiento.
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)