![두 파일의 첫 번째 열을 비교하고 file1의 세 번째 열을 file2의 네 번째 열로 바꿉니다.](https://linux55.com/image/71022/%EB%91%90%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%B2%AB%20%EB%B2%88%EC%A7%B8%20%EC%97%B4%EC%9D%84%20%EB%B9%84%EA%B5%90%ED%95%98%EA%B3%A0%20file1%EC%9D%98%20%EC%84%B8%20%EB%B2%88%EC%A7%B8%20%EC%97%B4%EC%9D%84%20file2%EC%9D%98%20%EB%84%A4%20%EB%B2%88%EC%A7%B8%20%EC%97%B4%EB%A1%9C%20%EB%B0%94%EA%BF%89%EB%8B%88%EB%8B%A4..png)
파이프로 구분된 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