我想编写一个获取两个文件和 的shell script
程序,并得到如下结果:A
B
文件A
:
user_a tel_a addr_a
user_b tel_b addr_b
文件B
:
process_1 user_a
process_2 user_a
process_3 user_b
结果:
user_a process_1 tel_a addr_a
user_a process_2 tel_a addr_a
user_b process_3 tel_b addr_b
我怎样才能做到这一点?awk
或者是其他东西?
答案1
join
...
join -1 2 -2 1 FileB FileA
输出
user_a process_1 tel_a addr_a
user_a process_2 tel_a addr_a
user_b process_3 tel_b addr_b
输入文件需要按关键字段排序...您的示例文件已经排序,因此没有必要,但否则您可以按如下方式合并排序。
join -1 2 -2 1 <(sort -k2 FileB) <(sort FileA)
答案2
由于join
和paste
并非在任何地方都可用(例如,它们不在我的基于 BusyBox 的系统上),因此以下是如何根据要求使用 awk 执行此操作:
awk 'BEGIN {
while( (getline < "fileA") > 0) A[$1]=$2 OFS $3 # read fileA into the array A
close("fileA")
} {
print $2, $1, A[$2]
}' fileB