une dois arquivos baseados na coluna quando não há correspondência um-para-um no script bash (awk, grep, sed)

1

arquivo1.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

arquivo2.txt

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

Eu quero saída:

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

Eu quero adicionar a terceira coluna de file2.txt à terceira coluna de file1.txt com base nos valores da segunda coluna. Na verdade, quero me juntar a eles com base na segunda coluna, mas não há correspondência de um para um entre eles . Como posso fazer isso com awk ou grep ou sed no script de shell? Por favor me ajude.

    
por m.ms 12.08.2015 / 08:30

2 respostas

2

A tarefa pode ser executada por um awk :

awk -F'|' 'FNR==NR{host[$2]=$3;next}{$3=host[$2] $3}1' OFS='|' file2 file1
    
por 12.08.2015 / 09:38
0

Veja uma maneira possível de fazer isso com awk e sed trabalhando em conjunto:

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