올바른 순서로 출력되도록 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

awkto 명령 의 출력을 파이프 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)

관련 정보