2017-04-12 57 views
0

好吧,我有幾個文件,並且遇到麻煩,請將它們與awk結合使用。 這裏有三個樣本文件:如何通過awk加入多個文件

FILEA

2 2 31771 15 5327353  4.73E-04 1 1 
2 2 40642 23 27428869 -8.29E-04 1 1 
2 2 21517 7 89002990 -2.41E-04 1 1 
2 2 33787 16 44955568  2.86E-05 1 1 

FILEB

2 2 31771 15 5327353  5.07E-04 1 1 
2 2 40642 23 27428869 5.45E-04 1 1 
2 2 21517 7 89002990 1.85E-04 1 1 
2 2 33787 16 44955568 3.73E-04 1 1 

FileC

2 2 31771 15 5327353  4.28E-04 1 1 
2 2 40642 23 27428869 -7.55E-04 1 1 
2 2 21517 7 89002990 -2.01E-04 1 1 
2 2 33787 16 44955568 3.09E-05 1 1 

每個文件有8列,但我並不需要列1,2 ,7和8.列3,4和5對所有文件都是共同的,這些可能是joi的參考列這些文件,列6將是每個文件的不同信息。在一般情況下,我最後的文件應該是這樣的:

Finalfile

31771 15 5327353  4.73E-04 5.07E-04 4.28E-04 
40642 23 27428869 -8.29E-04 5.45E-04 -7.55E-04 
21517 7 89002990 -2.41E-04 1.85E-04 -2.01E-04 
33787 16 44955568 2.86E-05 3.73E-04 3.09E-05 

我嘗試下面的命令:

awk 'NR==FNR{a[$3]=$6;next}{print $3"\t"$4"\t"$5"\t"$6"\t"a[$3]}' FileA FileB FileC > Finalfile 

但不幸的是它只有兩個文件的工作,我也得到類似這個:

2 2 31771 15 5327353  4.73E-04 5.07E-04 
2 2 40642 23 27428869 -8.29E-04 5.45E-04 
2 2 21517 7 89002990 -2.41E-04 1.85E-04 
2 2 33787 16 44955568 2.86E-05 3.73E-04 

有人能幫忙嗎?請記住,有多個文件(10),而不僅僅是三個。非常感謝你!

回答

3

這給一試:

awk '{a[$3FS$4FS$5]=a[$3FS$4FS$5]""$6FS}END{for (i in a){print i, a[i]}}' file* 

一個清潔版本(感謝@詹姆斯 - 布朗):

awk '{ a[$3 OFS $4 OFS $5 FS] = a[$3 OFS $4 OFS $5 FS] (a[$3 OFS $4 OFS $5 FS] == "" ? "" : OFS) $6 } 
    END{ for (i in a){print i,a[i]} }' OFS="\t" file* 

輸出

33787 16 44955568 2.86E-05 3.73E-04 3.09E-05 
21517 7 89002990 -2.41E-04 1.85E-04 -2.01E-04 
40642 23 27428869 -8.29E-04 5.45E-04 -7.55E-04 
31771 15 5327353  4.73E-04 5.07E-04 4.28E-04 
+2

我很欣賞緊湊比別人更多,但我大概'{ a [$ 3 OFS $ 4 OFS $ 5] = a [$ 3 OFS $ 4 OFS $ 5](a [$ 3 OFS $ 4 OFS $ 5] ==「」? 「」:OFS)$ 6}'。除此之外<3。 –

+2

是的很有表現力@JamesBrown +1 – klashxx

+0

謝謝,我讚賞你的幫助。 –

2

+ AWK方法(用 「漂亮」 的輸出):

paste fileA fileB fileC | awk '{print $3,$4,$5,$6,$14,$22}' | column -tx 

輸出:

31771 15 5327353 4.73E-04 5.07E-04 4.28E-04 
40642 23 27428869 -8.29E-04 5.45E-04 -7.55E-04 
21517 7 89002990 -2.41E-04 1.85E-04 -2.01E-04 
33787 16 44955568 2.86E-05 3.73E-04 3.09E-05