한 파일의 토큰을 다른 파일의 데이터로 바꾸는 방법은 무엇입니까?

한 파일의 토큰을 다른 파일의 데이터로 바꾸는 방법은 무엇입니까?

저는 bash 쉘과 함께 Amazon Linux를 사용하고 있습니다. 각 줄이 아래와 같은 쉼표로 구분된 데이터가 포함된 파일이 있습니다.

2049,576804C7DF554416A9EA25B2A5A81514,X,

그런 다음 각 줄이 아래와 같이 보이는 쉼표로 구분된 데이터를 포함하는 두 번째 파일이 있습니다.

id,user_name,user_email

두 번째 파일의 각 줄은 고유합니다. 내 질문은 첫 번째 파일의 각 줄을 가져오고 두 번째 토큰을 두 번째 파일의 일치하는 데이터로 바꾸는 방법입니다(첫 번째 파일의 두 번째 토큰을 두 번째 파일의 첫 번째 토큰과 비교하여 비교). 예를 들어, 제가 위에 나열한 유치권은 다음과 같습니다.

2049,576804C7DF554416A9EA25B2A5A81514,username1,email1,X,

"576804C7DF554416A9EA25B2A5A81514"가 두 번째 파일에 있을 수 있다고 가정합니다.

답변1

아래 스크립트처럼 사용하세요.gawk

#!/bin/bash
gawk -F, 'tbl[$1]!=""{$2=tbl[$1];OFS=",";print;next}{tbl[$1]=$2;}' $1 $2

먼저 토큰 파일과 함께 두 개의 파일을 전달합니다. 이는 첫 번째 파일에 중복 항목이 없다고 가정하고 두 번째 파일에 첫 번째 파일에서 첫 번째 필드와 일치하지 않는 추가 줄이 있는 경우 해당 줄은 출력에서 ​​생략됩니다.

프로그램 gawk은 첫 번째 파일에서 첫 번째 필드로 인덱싱된 연관 배열을 작성한 tbl다음 이를 사용하여 두 번째 파일의 두 번째 필드를 바꾼 다음 대체 항목이 포함된 줄을 인쇄하고 ","를 필드 구분 기호로 사용합니다. man gawk자세한 내용은 참조하십시오 .

관련 정보