纠正 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

我的文件将是这样的:

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)

相关内容