2015-05-02 60 views
0

我有一個包含2個不同行標識符的數據集,我想使用2個不同的行標識符獲取2個不同列的比率並輸出到一個單獨的文件中。來自2個不同匹配字段的Awk求和列

例如:

輸入

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,得到的$ 4 $ 3 /總和之和的比率,以獲得以下的(用於離。AVPR1A CG55分之3= 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命令呢?

謝謝!

回答

3

是的,它甚至很容易:

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,但不需要這樣做更簡單。

+0

omg謝謝我,我很愚蠢...... – Rudy

+0

別擔心;它帶有練習。使用awk後30年更容易。 –