개행으로 끝나는 문자열 수가 동일한 두 개의 텍스트 파일이 있습니다. 두 파일의 행은 서로 일치합니다. 각 파일에서 줄이 반복될 수 있습니다.
첫 번째 파일이나 두 번째 파일에서 어떤 두 줄이 다르고 출력되는지 빠르게 확인하고 싶습니다.
파일 A:
this is a string
this is another string
empty string
파일 B:
this is A string
this is another string
Empty string
파일 A의 관점에서는 첫 번째와 세 번째 줄이 파일 B의 내용과 다르기 때문에 출력하고 싶습니다. 마찬가지로 파일 B의 경우 파일의 첫 번째 줄과 세 번째 줄을 출력합니다.
파일을 비교하는 표준 방법은 두 파일을 모두 정렬한 다음 comm
바이너리를 사용하는 것이지만, 정렬하면 두 파일 간의 대응 관계가 파괴됩니다. 나도 이 작업을 수행하려고 시도했지만 diff
다른 작업을 위해 설계된 것 같습니다.
탭을 사용하여 두 파일의 출력에서 서로 다른 줄을 구분할 수도 있습니다.
답변1
이를 다음과 같은 관점에서 비교합니다 fileA
.
$ awk 'FNR==NR{a[NR]=$0;next;} $0!=a[FNR]' fileB fileA
this is a string
empty string
이 방법은 전체 내용을 fileB
메모리로 읽어옵니다. 따라서 파일이 큰 경우(메모리에 비해 너무 큰 경우) 다른 방법을 선택해야 합니다.
마찬가지로 관점에서 출력을 가져옵니다 fileB
.
$ awk 'FNR==NR{a[NR]=$0;next;} $0!=a[FNR]' fileA fileB
this is A string
Empty string
보다 메모리 효율적인 접근 방식
이 방법은 한 번에 두 행만 읽으므로 메모리 효율성이 더 높습니다. 다음과 같은 관점에서 살펴보세요 FileA
.
$ awk '{a=$0;getline <"fileA";} $0!=a' fileB
this is a string
empty string
다음과 같은 관점에서 살펴보세요 fileB
.
$ awk '{a=$0;getline <"fileB";} $0!=a' fileA
this is A string
Empty string