2개 파일의 데이터를 비교한 후 파일 2의 순서대로 누락된 데이터가 포함된 출력 파일을 생성하는 방법

2개 파일의 데이터를 비교한 후 파일 2의 순서대로 누락된 데이터가 포함된 출력 파일을 생성하는 방법

저는 쉘 스크립팅을 처음 접했고 다음을 만들고 싶습니다. 비슷한 것을 사용할 수 있다고 생각 grep -xvFf file1 file2하지만 출력 파일을 올바른 순서로 생성하는 방법을 잘 모르겠습니다.

다음과 같이 file1이 있습니다.

CustomerName     CustomerID
Joe                  1
Kenny                2
Craig                3
Pearl                4

file2에는 다음 내용이 있습니다.

CustomerName      CustomerID
Pearl
Kenny
Joe
Craig

그래서 제가 달성하고 싶은 것은 두 파일을 비교하여 누락된 데이터를 찾은 다음 해당 데이터를 file2와 동일한 순서로 세 번째 파일에 출력하는 것입니다. 따라서 출력 파일은 다음과 같습니다.

CustomerName      CustomerID
Pearl                 4
Kenny                 2
Joe                   1
Craig                 3

어떤 통찰력이라도 좋을 것입니다.

답변1

사용 awk:

awk 'NR==1 { print; }
     NR==FNR && FNR>1{ customerIds[$1]=$2; next }
     FNR>1 && ($1 in customerIds) { print $1, customerIds[$1]; }
' OFS='\t' file1 file2

사용 시 헤더 라인을 한 번 인쇄합니다 NR==1 { print; }.
그런 다음 저장파일 1customerIds$1(키는 customerName , 값은 Ids) 라는 연관 배열로 $2:

NR==FNR && FNR>1{ customerIds[$1]=$2; next }

다음으로 확인해보자파일 2, customerName이 배열에 존재하는 경우 customerIdscustomerName과 $1위에서 저장한 동일한 배열의 ID를 인쇄합니다.

FNR>1 && ($1 in customerIds) { print $1, customerIds[$1]; }

답변2

$ awk 'NR==FNR{a[$1]=$0; next} $1 in a{print a[$1]}' file1 file2
CustomerName     CustomerID
Pearl                4
Kenny                2
Joe                  1
Craig                3

관련 정보