我有两个文件我尝试根据列加入/合并。
实施例
档案1
aa
bb
aa
bb
cc
aa
文件2
aa 12e
bb wqq
期望的输出
aa 12e
bb wqq
aa 12e
bb wqq
cc
aa 12e
答案 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的顺序。