исправление скрипта awk для получения вывода в правильном порядке

исправление скрипта awk для получения вывода в правильном порядке

У меня есть «скрипт» awk, который суммирует столбец 3, затем 4, для каждого значения в столбце 1 и когда столбец 2 > 0:

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)

Связанный контент