2016-11-28 2 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.) 

Я хотел бы объединить $ 1-ый из первого файла с $ 13 из второго файла в то время как 2-й (без «/ W») разделился в первом файле с $ 16 или 19-м во втором файле. Если совпадение печатает 1-й файл и 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,??}' 

Tahnk вы так много.

+0

Я пытаюсь сделать это AWK -F '\ т' «FNR == NR {а [$ 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

Смежные вопросы