Korrigieren des Awk-Skripts, um die Ausgabe in der richtigen Reihenfolge zu erhalten

Korrigieren des Awk-Skripts, um die Ausgabe in der richtigen Reihenfolge zu erhalten

Ich habe ein awk-„Skript“, das für jeden Wert in Spalte 1 und wenn Spalte 2 > 0 ist, erst Spalte 3 und dann 4 summiert:

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

Mein Infile würde so aussehen:

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

Und so weiter, sagen wir bis Z. Die Ausgabe wäre hier:

Target covered_bases percentage_covered
S 310 0.8
D 27  0.654

Das ist also in Ordnung. Allerdings werden die Buchstaben in der falschen Reihenfolge ausgegeben. Ich weiß aus anderen Fragen hier, dass awk manchmal Dinge in der falschen Reihenfolge ausgibt. Mein Problem ist, dass ich das mit den vorherigen Antworten in diesem Forum anscheinend nicht korrigieren kann, da mein awk-Verständnis überhaupt nicht groß ist und mein „Skript“ für meinen Geschmack schon ziemlich kompliziert ist.

Können Sie mir sagen, wie ich das korrigieren kann?

Vielen Dank!

Antwort1

Leiten Sie die Ausgabe Ihres Befehls einfach weiter awk, sortaber hängen Sie nach awkder Verarbeitung den Header an.

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)

verwandte Informationen