awk スクリプトを修正して出力を正しい順序にする

awk スクリプトを修正して出力を正しい順序にする

列 1 の各値と列 2 > 0 の場合に、列 3、列 4 を合計する awk「スクリプト」があります。

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

私のインファイルは次のようになります:

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)

関連情報