2014-06-10 51 views
1

我試圖加入兩個文件,這兩個文件具有不同的行和列長度,並且有一列以未排序的方式包含類似信息。根據列中的字段加入2個文件

的文件看起來是這樣的: 文件1

ab 23 33 4 55 6 7 8 9 
ab 2 3 44 5 6 7 8 
ab 3 4 22 7 8 9 9 00 9 
ad 2 3 4 5 4 3 
ac 456 47 8 9 0 0 hh kk 
af 2 dd 5 6 zz 7 8 

文件2

data ab 33 4 5 
data ad 3 4 5 
data ac 3 4 5 6 7 8 

預期輸出:

文件3

ab 23 33 4 55 6 7 8 9 data ab 33 4 5 
ab 2 3 44 5 6 7 8 data ab 33 4 5 
ab 3 4 22 7 8 9 9 00 9 data ab 33 4 5 
ad 2 3 4 5 4 3 data ad 3 4 5 
ac 456 47 8 9 0 0 hh kk data ac 3 4 5 6 7 8 

展望還有其他職位How to join multiple txt files into based on column?Join on first column of two files,我想通了,最好的辦法是使用

awk 

我試過:

awk -F "\t" 'NR==FNR{a[$2]=$0; next}$1 in a {print $0, a[$2]}' file2 file1 > file3 

的問題是,它只是打印file1和file2的不是。

我真的不明白我的錯誤在哪裏。任何建議?

非常感謝!

+1

發佈期望的輸出。 –

回答

0

你沒有張貼預期的輸出,但你的AWK線有問題,我想這應該是:

awk -F "\t" 'NR==FNR{a[$2]=$0; next}$1 in a {print $0, a[$1]}' file2 file1 

我在最後{...}改變,a[$2] -> a[$1]

+0

這太令人沮喪了....是的,你是對的!但我不明白爲什麼。 a [$ 2]是否意味着「打印整個第一個文件」? – efrem

+0

@efrem in'NR == FNR {..}','$ 1,2,3 ...'是第一個輸入文件的列,它是'file2'。在{$}中的$ 1中,$ 1,$ 2,$ 3 ...是第二個輸入文件的列,它是'file1',我認爲你被$ x和輸入混淆了文件 – Kent

+0

非常感謝。它完成了這項工作,但正如我在編輯帖子中指出的那樣,現在發生了一些奇怪的事情。我不懂爲什麼。 – efrem

相關問題