AWK는 두 파일을 비교합니다.

AWK는 두 파일을 비교합니다.

AWK를 배운지 오래되지 않았지만 여전히 헷갈립니다. AWK를 사용하여 두 개의 txt 파일을 비교하고 비교 결과에 따라 병합된 출력을 생성하려고 합니다.

파일 1.txt

budi
andi

파일 2.txt

sinta Sep 29 17:12
andi Sep 15 17:12
kuro Sep 9 17:12
budi Sep 2 17:13

나는 사용하려고

awk 'FNR==NR{a[$1];next};$NF in a' cobafull.txt coba.txt > result.txt`

이것이 결과이다

budi
andi

나는 이런 출력을 원한다

budi Sep 2 17:13
andi Sep 15 17:12

여러분의 조언이 필요합니다. 감사해요.

추가해서 죄송합니다

file1.txt = coba.txt
file2.txt = cobafull.txt

답변1

파일이 다음과 같이 file1.txt승인되는 경우 :coba.txtfile2.txtcobafull.txt

awk 'NR == FNR {A[$1]=$0; next}; {print A[$0]}' coba{full,}.txt

산출:

budi Sep 2 17:13
andi Sep 15 17:12

출력 순서가 중요하지 않은 경우:

awk 'A[$1]++' coba{,full}.txt

산출:

andi Sep 15 17:12
budi Sep 2 17:13

답변2

이를 각각 의미 file1.txt하고 후자 가 "더 넓은" 파일이라고 가정 하면 다음을 수행합니다.file2.txtcoba.txtcobafull.txt

awk 'FNR==NR{a[$1];next};$NF in a' cobafull.txt coba.txt > result.txt

따라서 "완전한" 파일을 먼저 읽게 됩니다. 첫 번째 줄을 읽으면 awk다음 레코드가 표시됩니다.

sinta Sep 29 17:12

a["sinta"]그런 다음 같음을 설정 "siinta"하고 레코드 처리를 중지합니다. 그런 다음 그에 따라 파일의 나머지 부분을 읽습니다.

그런 다음 두 번째 파일을 읽기 시작합니다. 첫 번째 줄을 읽고 다음 레코드를 확인합니다.

sinta

그런 다음 "sinta"해당 인덱스가 배열에 있는지 확인하십시오 a. 그렇다면 이 시점에서 간단히 다음과 같은 레코드를 인쇄합니다.

sinta

인수 목록에서 파일 순서를 바꾸면 예상대로 작동합니다.

관련 정보