Awk
如何計算文件特定行中值的百分比?
我建構了一個文件,其中包含用於標識多個比對的通用 ID 的標題,並且在下一行是與該比對 ID 對應的基因組 ID。根據下面的範例,除了基因組 ID,我還有想要轉換為百分比的數字,將百分比的值添加為第三列:
原始文件:
>對齊_1 GCA_910584205.1 13 GCA_003584705.1 7 >對齊_2 GCA_002361735.1 168 GCA_002492725.1 2880 GCA_002492725.1 2880 >對齊_3 GCA_900540295.1 165 GCA_002490525.1 125
最終文件:
>對齊_1 GCA_910584205.1 13 65% GCA_003584705.1 7 35% >對齊_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 可用於計算列中值與列總值相比的百分比,但是如何通過由標題分隔的對齊組獲得這些百分比?
$ 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()
,請參閱roundup-function-in-unix。