저는 쉘 스크립팅을 처음 접했고 다음을 만들고 싶습니다. 비슷한 것을 사용할 수 있다고 생각 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이 배열에 존재하는 경우 customerIds
customerName과 $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