두 파일의 첫 번째 열을 비교하고 file1의 세 번째 열을 file2의 네 번째 열로 바꿉니다.

두 파일의 첫 번째 열을 비교하고 file1의 세 번째 열을 file2의 네 번째 열로 바꿉니다.

파이프로 구분된 2개의 파일 사이의 첫 번째 열을 비교해야 하며 일치하는 경우 파일 1의 세 번째 열을 파일 2의 네 번째 열로 바꿔야 합니다.

파일 1:

111|xyz|23345
222|abc|123
333|xyz|45667
444|xyz|5432
555|xyz|8976

파일 2:

111|xyz|344|rtms
222|abc|222|xyzw
666|xyz|ggg|abde
888|xyz|ff|nnnn
333|xyz|dd|abde
444|xyz|vv|nnnn
555|xyz|bbb|uuyytt

결과물 파일:

111|xyz|rtms
222|abc|xyzw
333|xyz|abde
444|xyz|nnnn
555|xyz|uuyytt

답변1

awk임시 파일이 필요하지 않은 한 줄:

join -t '|' -j1 -o 1.1 1.2 2.4 <(sort -t'|' -k1,1 file1) <(sort -t '|' -k1,1 file2)

join및 다음 을 모두 사용하십시오 awk.

먼저 file2첫 번째 필드를 기준으로 정렬하고 저장합니다.file2.sort

sort -k 1 file2 > file2.sort

이제 "|"를 구분 기호로 사용하여 file1file2.sort. 그런 다음 다시 "|"를 구분 기호로 사용하여 필요한 열을 추출합니다 awk.

join -t '|' file1 file2.sort | awk -F  "|" ' {print $1"|"$2"|"$6}'

출력은 다음과 같습니다:

ron@ron:~$ join -t '|' file1 file2.sort | awk -F  "|" ' {print $1"|"$2"|"$6}'
111|xyz|rtms
222|abc|xyzw
333|xyz|abde
444|xyz|nnnn
555|xyz|uuyytt

관련 정보