
두 개의 파일이 있다고 가정해 a.txt
보겠습니다 b.txt
.
콘텐츠 a.txt
:
hello world
콘텐츠 b.txt
:
hello world
something else
물론 vimdiff
차이점을 확인하는 데 사용할 수 있습니다. 즉, a.txt
위 의 예와 같이 에 있는 모든 행이 포함되어야 함 b.txt
을 의미합니다 .b.txt
a.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