AWK合并具有更多条件的两个文件

时间:2016-11-28 13:32:50

标签: awk merge split

我需要帮助合并两个文件。

第一档:

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.)

我想将第一个文件中的$ 1st与第二个文件中的$ 13th合并,然后在第一个文件中将$ 2nd(没有“/ W”)拆分为第二个文件中的$ 16或$ 19。如果匹配打印第一个文件和第二个文件12美元,如果missmatch只打印$ 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,??}' 

非常感谢你。

1 个答案:

答案 0 :(得分: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