여러 열을 사용하여 2개의 파일을 비교하고 두 파일의 행을 인쇄합니다.

여러 열을 사용하여 2개의 파일을 비교하고 두 파일의 행을 인쇄합니다.

그래서 다음과 같은 형식의 두 개의 플랫 파일이 있습니다.

파일1.txt

Customer1 12345 12346 12347 15646
Customer2 14444 14445

파일2.txt

12345 aol.com
12347 gmail.com
12346 google.com
14444 yahoo.com
14445 outlook.com
15646 space.com

내 Desire 출력은 다음과 같습니다.

Customer1 aol.com gmail.com google.com space.com
Customer2 yahoo.com outlook.com

지금까지 다음을 생각해 냈지만 파일 1의 열 2만 사용하는 것 같습니다. 파일 1의 모든 열을 포함하도록 이 명령을 확장할 수 있습니까?

awk 'NR==FNR {a[$1]=$2; next} $2 in a {print $0, a[$2]}' OFS='\' file2.txt file1.txt

답변1

$2다음의 필드를 계속해서 반복해야 합니다 File1.txt.

$ awk 'NR==FNR {a[$1]=$2; next} {for (i=2;i<=NF;i++) $i = $i in a ? a[$i] : $i} 1' File2.txt File1.txt
Customer1 aol.com google.com gmail.com space.com
Customer2 yahoo.com outlook.com

일치하는 항목이 있다고 확신하거나 일치하지 않는 항목을 빈 필드로 바꾸려는 경우 는 $i = $i in a ? a[$i] : $i단순화될 수 있습니다 .$i = a[$i]

관련 정보