2016-11-28 79 views
0

我需要合併兩個文件的幫助。AWK將兩個文件合併爲更多條件

一號文件:

header1 
raw1 spec1/W a b c d 
raw2 spec2/W a c d d 
raw3 spec3/W a d b b 

第二個文件:

headerXX 
headerY 
headerZ 
z a d a r z j z u o p 45600 raw1 a d spec1 b d a .... 
d a r a f g h z u i d 6054 raw2 a f a s a spec2 ... 
k o k o j o p s t d v 5000 raw3 d f a f g h ... 

輸出文件:

header1 
raw1 spec1/W a b c d 45600 
raw2 spec2/W a c d d 6054 
raw3 spec3/W a d b b (there won't be number because no spec.) 

我想從第一文件第13 $從第二個文件合併$第同時在第一個文件中以$ 16或$第二個文件分割$ 2(沒有「/ W」)。如果匹配打印第一個文件,從第二個文件打印$ 12,如果不匹配打印$ 1文件。

如果它可以幫助你:

的第一場比賽:

awk -F'\t' -v OFS="\t" 'FNR==NR{a[$1]++; next}; $13 in a {print $0,??}' 

和第二場比賽,我認爲是這樣的:

awk -F'\t' -v OFS="\t" '{split($2,a,"/") print $1,a[1],$2,$3,$4,$5,$6}' | awk 'FNR==NR{a[$2]++; next}; $16 || $19 in a {print $0,??}' 

Tahnk你這麼多。

+0

我試圖做到這一點的awk -F'\ t「FNR == NR {A [$ 1,$ 2];下一}(($ 13 $ 16) ||($ 13,$ 19)a){print $ 0}'file1 file2但它不起作用:-( – Vonton

回答

1

這會做...

$ awk 'NR==FNR{a[$13,$16]=a[$13,$19]=$12; next} 
       {split($2,s,"/"); print $0, a[$1,s[1]]}' file2 file1 

header1 
raw1 spec1/W a b c d 45600 
raw2 spec2/W a c d d 6054 
raw3 spec3/W a d b b 
+0

它做了...很好的幫助karakfa,非常感謝... – Vonton