두 파일을 비교하고 일치하는 줄을 새 파일로 보냅니다.

두 파일을 비교하고 일치하는 줄을 새 파일로 보냅니다.

파일이 두 개 있어요

파일 1.txt

a|1|cd
a|2|cd
a|4|cd

파일 2.txt

a|0001|hj|df
a|0002|ed|nb
a|0003|vf|za
a|0004|er|ns
a|0005|oi|lk

파일의 두 번째 열과 일치하는 행이 포함된 새 파일을 만들려면 파일이 필요합니다. 다음 코드를 시도해 보겠습니다.

awk -F"|" 'NR==FNR{a[$2]++;next} a[$2] ' file1.txt file2.txt

하지만 두 번째 열의 file1.txt 왼쪽에 0이 포함되어 있지 않기 때문에 레코드를 찾을 수 없습니다.

awk -F"|" 'NR==FNR{a[$(printf("%09d\n", $2))]++;next} a[$2]'

하지만 작동하지 않습니다.

결과는 다음과 같아야 합니다.

파일 3.txt

a|0001|hj|df
a|0002|ed|nb
a|0004|er|ns

답변1

필드에 0을 추가하면 awk는 이를 문자열이 아닌 숫자로 처리하게 됩니다.

$ awk -F"|" 'NR==FNR{a[$2+0]++;next} a[$2+0] ' file1.txt file2.txt
a|0001|hj|df
a|0002|ed|nb
a|0004|er|ns

0001문자열은 와 다르기 때문에 1각 값에 0을 추가하여 숫자로 변환하여 원하는 비교를 생성합니다.

관련 정보