두 파일을 비교할 때 다른 줄 출력

두 파일을 비교할 때 다른 줄 출력

개행으로 끝나는 문자열 수가 동일한 두 개의 텍스트 파일이 있습니다. 두 파일의 행은 서로 일치합니다. 각 파일에서 줄이 반복될 수 있습니다.

첫 번째 파일이나 두 번째 파일에서 어떤 두 줄이 다르고 출력되는지 빠르게 확인하고 싶습니다.

파일 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

관련 정보