2016-11-28 1 views
0

두 파일을 병합하는 데 도움이 필요합니다.두 파일을 더 많은 조건으로 병합하는 AWK

1 파일 :

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

2 파일 :

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로 첫 번째 파일에서 $ 1을 병합하고 싶습니다 2 번째 파일에서는 16 번째 또는 19 번째 파일이 첫 번째 파일에 $ 2 ("/ W"제외)로 분할됩니다. missmatch가 $ 1 파일 만 인쇄하는 경우 두 번째 파일에서 첫 번째 파일과 $ 12를 일치시킵니다. 첫 경기에 대한

: 그것은 당신을 도울 수있는 경우

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 당신이 너무 많은 :

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

와 두 번째 경기를 위해 뭔가 같은 생각합니다.

+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

그랬습니다 ... 큰 도움 카락 파, 많이 감사합니다 ... – Vonton

관련 문제