2015-11-01 40 views
1

我有兩個文件我試圖根據列加入/合併。如何合併Linux中的兩個文件

文件1

aa 
bb 
aa 
bb 
cc 
aa 

文件2

aa 12e 
bb wqq 

希望的輸出

aa 12e 
bb wqq 
aa 12e 
bb wqq 
cc 
aa 12e 
+0

你有什麼辦法嗎? – Downvoter

+2

也許是一個複製:http://stackoverflow.com/questions/31097908/join-two-files-on-linux?rq=1 – wgitscht

+0

回答在這篇文章中使用AWK http://stackoverflow.com/questions/33268892 /使用awk-to-lookup-data-in-2-csv-files – nabeel

回答

3

下面是使用關聯數組中擊的方法。

首先,文件2被讀出,和一個關聯數組被構造,映射值:

declare -A mapping 

while read line; do 
    values=($line) 
    mapping[${values[0]}]=${values[1]} 
done < b.txt 

然後,文件1被讀出,並且每個條目中查找,並添加到打印輸出:

while read line; do 
    echo $line ${mapping[$line]} 
done < a.txt 

這將產生所需的輸出:

aa 12e 
bb wqq 
aa 12e 
bb wqq 
cc 
aa 12e 

我覺得有一定是一個MO使用一些舊的UNIX時代工具也可以使用簡潔的方式來完成這些工作。也許有人會啓發我們。

+0

Tnx Jameson 但我不想刪除重複的記錄和排序 – David

+0

什麼?你做還是不做?上面的代碼可以滿足你的要求。 – Jameson

+0

好的,我不想刪除重複項。並將結果排序... – David

1
join -a 1 <(sort file1) <(sort -k1,1 file2) 

輸出:

 
aa 12e 
aa 12e 
aa 12e 
bb wqq 
bb wqq 
cc 

缺點:文件1,你鬆秩序。

+0

Tnx賽勒斯 其罰款 但它會更好,如果沒有排序 – David