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.txt
file2.txt
cobafull.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.txt
coba.txt
cobafull.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
인수 목록에서 파일 순서를 바꾸면 예상대로 작동합니다.