我有兩個文件我試圖根據列加入/合併。如何合併Linux中的兩個文件
例
文件1
aa
bb
aa
bb
cc
aa
文件2
aa 12e
bb wqq
希望的輸出
aa 12e
bb wqq
aa 12e
bb wqq
cc
aa 12e
我有兩個文件我試圖根據列加入/合併。如何合併Linux中的兩個文件
例
文件1
aa
bb
aa
bb
cc
aa
文件2
aa 12e
bb wqq
希望的輸出
aa 12e
bb wqq
aa 12e
bb wqq
cc
aa 12e
下面是使用關聯數組中擊的方法。
首先,文件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時代工具也可以使用簡潔的方式來完成這些工作。也許有人會啓發我們。
join -a 1 <(sort file1) <(sort -k1,1 file2)
輸出:
aa 12e aa 12e aa 12e bb wqq bb wqq cc
缺點:文件1,你鬆秩序。
Tnx賽勒斯 其罰款 但它會更好,如果沒有排序 – David
你有什麼辦法嗎? – Downvoter
也許是一個複製:http://stackoverflow.com/questions/31097908/join-two-files-on-linux?rq=1 – wgitscht
回答在這篇文章中使用AWK http://stackoverflow.com/questions/33268892 /使用awk-to-lookup-data-in-2-csv-files – nabeel