如何在linux中合​​并两个文件

时间:2015-11-01 09:29:04

标签: linux bash awk sed

我有两个文件我尝试根据列加入/合并。

实施例

档案1

aa
bb
aa
bb
cc
aa

文件2

aa 12e
bb wqq

期望的输出

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

2 个答案:

答案 0 :(得分:3)

这是一种在Bash中使用关联数组的方法。

首先,读取文件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

我觉得必须使用一些旧的UNIX时代工具以更紧凑的方式执行此操作。也许有人会启发我们。

答案 1 :(得分:1)

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

输出:

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

缺点:你松开了file1的顺序。