
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
, sort
aber hängen Sie nach awk
der 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)