更正 awk 腳本以正確的順序輸出

更正 awk 腳本以正確的順序輸出

我有一個 awk“腳本”,它對第 1 列中的每個值以及當第 2 列 > 0 時對第 3 列進行求和,然後對第 4 列進行求和:

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

我的 infile 會是這樣的:

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

依此類推,假設為 Z。

Target covered_bases percentage_covered
S 310 0.8
D 27  0.654

所以這很好。但是,字母以錯誤的順序輸出。我從這裡的其他問題知道 awk 有時輸出的內容不按順序。我的問題是我似乎無法使用這個論壇中以前給出的答案來糾正這個問題,因為我對 awk 的理解根本不是很好,而且我的「腳本」在我看來已經相當複雜了。

你能讓我知道如何糾正它嗎?

非常感謝!

答案1

只需通過管道輸出命令awk即可,但在處理sort後附加標頭。awk

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)

相關內容