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사실 두 번째 열을 기준으로 조인하고 싶은데,그들 사이에는 일대일 대응이 없습니다.. awk또는를 사용하여 쉘 스크립트에서 이 작업을 어떻게 수행할 수 있습니까 grep? sed도와주세요.

답변1

해당 작업은 한 사람이 완료할 수 있습니다.:

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

답변2

awk이를 수행 하고 sed함께 작업할 수 있는 방법은 다음과 같습니다 .

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

관련 정보