我有两个文件我试图根据列加入/合并。如何合并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