当 bash 脚本中没有一对一对应关系时,根据列连接两个文件(awk、grep、sed)

当 bash 脚本中没有一对一对应关系时,根据列连接两个文件(awk、grep、sed)

文件1.txt

112|9305|/inst.exe
112|9305|/lkj.exe
112|9305|/dje.jar
112|9305|/ind.pdf
112|9306|/ma.exe
112|9306|/ngg.pdf
112|9307|/jhhh.dat
112|9312|/ee.dat
112|9312|/qwq.dll

文件2.txt

117|9305|www.gahan.com
117|9306|www.google.com
117|9312|www.mihan.com
117|9307|translate.com

我想要输出:

112|9305|www.gahan.com/inst.exe
112|9305|www.gahan.com/lkj.exe
112|9305|www.gahan.com/dje.jar
112|9305|www.gahan.com/ind.pdf
112|9306|www.google.com/ma.exe
112|9306|www.google.com/ngg.pdf
112|9307|translate.com/jhhh.dat
112|9312|www.mihan.com/ee.dat
112|9312|www.mihan.com/qwq.dll

我想根据第二列值将第三列添加file2.txt到第三列。file1.txt事实上,我想根据第二列加入他们,但有它们之间没有一一对应的关系。我如何使用awkgrepsed在 shell 脚本中执行这些操作?请帮我。

答案1

任务可由一人完成awk:

awk -F'|' 'FNR==NR{host[$2]=$3;next}{$3=host[$2] $3}1' OFS='|' file2 file1

答案2

这是一种可能的方法来完成awksed协同工作:

awk -F'|' '{print "s/"$2"|""/"$2"|"$3"/"}' file2.txt | sed -f /dev/stdin file1.txt

相关内容