私は複数のソートを識別する汎用IDを持つヘッダーを含み、次の行にそのソートIDに対応するゲノムIDを含むファイルを構成しました。ゲノムIDに加えて、以下の例に従って、パーセンテージ値を3番目の列に追加して数値をパーセンテージに変換したいと思います。
ソースファイル:
>align_1 GCA_910584205.1 13 GCA_003584705.1 7 >align_2 GCA_002361735.1 168 GCA_002492725.1 2880 GCA_002492725.1 2880 >ソート_3 GCA_900540295.1 165 GCA_002490525.1 125
最終文書:
>align_1 GCA_910584205.1 13 65% GCA_003584705.1 7 35% >align_2 GCA_002361735.1 168 3% GCA_002492725.1 2880 49% GCA_002492725.1 2880 49% >ソート_3 GCA_900540295.1 165 57% GCA_002490525.1 125 43%
awkを使用して列の合計値と比較して列値の割合を計算できますが、ヘッダーで区切られたソートグループを使用してこれらの割合をどのように取得できますか?
ベストアンサー1
$ cat tst.awk
/>/ {
if ( NR>1 ) {
prt()
}
key = $0
cnt = tot = 0
next
}
{
ids[++cnt] = $1
vals[cnt] = $2
tot += $2
}
END { prt() }
function prt( i) {
print key
for ( i=1; i<=cnt; i++ ) {
print ids[i], vals[i], ceil( (tot ? vals[i] / tot : 0) * 100 )"%"
}
}
function ceil(x, y) {
y = int(x)
return ( x>y ? y+1 : y )
}
$ awk -f tst.awk file
>Alignment_1
GCA_910584205.1 13 65%
GCA_003584705.1 7 35%
>Alignment_2
GCA_002361735.1 168 3%
GCA_002492725.1 2880 49%
GCA_002492725.1 2880 49%
>Alignment_3
GCA_900540295.1 165 57%
GCA_002490525.1 125 44%
詳細については、ceil()
次を参照してください。Unixの合成関数。