두 파일의 차이를 하나의 파일에 쓰는 방법

두 파일의 차이를 하나의 파일에 쓰는 방법

두 개의 파일이 있다고 가정해 a.txt보겠습니다 b.txt.

콘텐츠 a.txt:

hello world

콘텐츠 b.txt:

hello world
something else

물론 vimdiff차이점을 확인하는 데 사용할 수 있습니다. 즉, a.txt위 의 예와 같이 에 있는 모든 행이 포함되어야 함 b.txt을 의미합니다 .b.txta.txt

b.txt내 질문은 존재하지만 존재하지 않는 줄을 a.txt파일에 어떻게 기록합니까 ?

답변1

comm -1 -3 a.txt b.txt > c.txt

-1에만 있는 행을 제외 a.txt하고 -3둘 다에 있는 행을 제외합니다. 따라서 b.txt의 행만 출력됩니다( man comm자세한 내용은 또는 참조). comm --help출력이 다음으로 리디렉션됩니다.c.txt

두 파일의 차이를 확인하려면 diff대신 를 사용하세요 comm.

diff -u a.txt b.txt > c.txt

답변2

하위 집합에 신경 쓰지 않으면 그냥 사용할 수 있습니다

diff a.txt b.txt|grep ">"|cut -c 3- > foo.txt

.

$ cat a.txt
hello world
$ cat b.txt
hello world
something else
$ diff a.txt b.txt|grep ">"|cut -c 3- > foo.txt
$ cat foo.txt
something else

답변3

한정: 이것은 실제로는 파일 diff가 아니며 라인 diff 세트와 비슷합니다(그러나 아마도 이것이 필요할 것입니다).

a.txt다음의 모든 차이점은 다음과 같습니다 b.txt.

sort a.txt b.txt | uniq -u > c.txt

누락된 줄 a.txt(누락된 줄은 무시됨 b.txt):

sort a.txt a.txt b.txt | uniq -u > c.txt

설명: 2개의 파일을 함께 cat모은 후 파일 중 하나에만 존재하는 uniq 행만 표시하기 위해 sort행의 하위 세트를 복사했습니다 . uniq -u입력( a.txt위) 중 하나를 복사하면 출력에서 ​​해당 파일에 있는 모든 줄이 억제됩니다.

파일이 중복되면 위 명령의 출력이 손상됩니다. 파일에 중복이 있는 경우 먼저 이러한 중복을 제거한 다음 새로 생성된 파일에서 위 명령을 실행해야 합니다.

sort a.txt | uniq | aa.txt
sort b.txt | uniq | bb.txt

결과를 확인할 수 있습니다. 두 명령 모두 동일한 체크섬을 제공해야 합니다.

sort b.txt c.txt | uniq | sha256sum
sort a.txt c.txt | uniq | sha256sum

파일 중 하나가 다른 파일의 상위 집합인 경우(따라서 다른 파일의 모든 행과 그 이상을 포함하는 경우) 조금 단순화할 수 있습니다. 귀하의 예와 마찬가지로 이는 b.txt상위 집합이므로 다음 두 명령도 동일한 체크섬을 제공해야 합니다.

sort b.txt | sha256sum
sort a.txt c.txt | sha256sum

답변4

b.txt - a.txt: sort a.txt a.txt b.txt | uniq -u > foo.txt

관련 정보