파이프로 구분된 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
이제 "|"를 구분 기호로 사용하여 file1
및 file2.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