簡體   English   中英

來自2個不同匹配字段的Awk總和列

[英]Awk sum columns from 2 different matching fields

我有一個包含2個不同行標識符的數據集,我想使用2個不同行標識符獲取2個單獨列之間的比率,並將其輸出到一個單獨的文件中。

例如:

輸入項

 Avpr1a CG  1 30
 Avpr1a CHG 2 15
 Avpr1a CHH 1 15
 Avpr1a CG  2 25
 Avpr1a CHG 5 15
 Avpr1a CHH 8 15
 BDNF   CG  1 15
 BDNF   CHG 2 15
 BDNF   CHH 3 10
 BDNF   CG  8 20

我想要的是基於$ 1,$ 2列,得到$ 3與$ 4的總和的比值以獲得以下值(例如AVPR1a CG 3/55 = 0.05)

輸出量

 Avpr1a CG  0.05
 Avpr1a CHG 0.233
 Avpr1a CHH 0.3
 BDNF   CG  0.xxx
 BDNF   CHG 0.xxx
 BDNF   CHH 0.xx

你明白了。

我目前正在通過組合各列,合並和除法來真正愚蠢地做到這一點

awk '{a[$1,$2]+=$3}END{for(i in a){print i, a[i]}}'
awk '{a[$1,$2]+=$4}END{for(i in a){print i, a[i]}}'
merge
awk and print $3/$4 from intermediate files

是否可以在單個awk命令中實現我想做的事情?

謝謝!

是的,這甚至很容易:

awk '{s1[$1,$2] = $1; s2[$1,$2] = $2; s3[$1,$2] += $3; s4[$1,$2] += $4}
     END { for (i in s3) print s1[i], s2[i], s3[i]/s4[i] }' data

輸出:

Avpr1a CG 0.0545455
BDNF CHG 0.133333
BDNF CHH 0.3
Avpr1a CHG 0.233333
BDNF CG 0.257143
Avpr1a CHH 0.3

如果您沒有捕獲s1s2的單獨項目,而是打印i ,則會得到帶有\\034字符的輸出,以分隔兩個名稱文件。 您可以使用tr修復此問題,但是不需要這樣做更簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM