corrigiendo el script awk para que la salida esté en el orden correcto

corrigiendo el script awk para que la salida esté en el orden correcto

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 awkcomando sortpero agregue el encabezado después awkdel 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)

información relacionada