[linux] 리눅스 터미널에서 두 파일 비교

“a.txt”“b.txt” 라는 두 파일에는 모두 단어 목록이 있습니다. 이제 “a.txt”에 추가되어 있고 “b.txt”에 없는 단어를 확인하고 싶습니다 .

두 사전을 비교할 때 효율적인 알고리즘이 필요합니다.



답변

vim을 설치 한 경우 다음을 시도하십시오.

vimdiff file1 file2

또는

vim -d file1 file2

환상적입니다.여기에 이미지 설명을 입력하십시오


답변

그들을 정렬하고 사용하십시오 comm:

comm -23 <(sort a.txt) <(sort b.txt)

comm(정렬 된) 입력 파일을 비교하고 기본적으로 a에 고유 한 행, b에 고유 한 행 및 둘 다에 존재하는 세 개의 열을 출력합니다. 지정하여 -1, -2및 / 또는 -3당신은 해당 출력을 억제 할 수 있습니다. 따라서 comm -23 a ba에 고유 한 항목 만 나열합니다. <(...)구문을 사용하여 파일을 즉석에서 정렬합니다. 이미 정렬되어 있으면 필요하지 않습니다.


답변

시도 sdiff( man sdiff)

sdiff -s file1 file2


답변

diff리눅스에서 도구를 사용 하여 두 파일을 비교할 수 있습니다. –changed-group-format–unchanged-group-format을 사용할 수 있습니다 필터에 필요한 데이터에 대한 옵션을.

다음 세 가지 옵션을 사용하여 각 옵션에 대한 관련 그룹을 선택할 수 있습니다.

  • ‘% <‘은 (는) FILE1에서 줄을 가져옵니다.

  • ‘%>’는 FILE2에서 줄을 가져옵니다.

  • 두 파일에서 줄을 제거하기위한 ”(빈 문자열)

예 : diff –changed-group-format = “% <“–unchanged-group-format = “”file1.txt file2.txt

[root@vmoracle11 tmp]# cat file1.txt
test one
test two
test three
test four
test eight
[root@vmoracle11 tmp]# cat file2.txt
test one
test three
test nine
[root@vmoracle11 tmp]# diff --changed-group-format='%<' --unchanged-group-format='' file1.txt file2.txt
test two
test four
test eight


답변

의 diff 출력 스타일을 선호하는 경우 git 저장소에없는 파일을 비교하기 git diff위해 --no-index플래그 와 함께 사용할 수 있습니다 .

git diff --no-index a.txt b.txt

각각 약 200k 개의 파일 이름 문자열을 가진 두 개의 파일을 사용하여 (내장 time명령으로)이 접근법을 벤치 마크 한 다른 답변과 비교했습니다.

git diff --no-index a.txt b.txt
# ~1.2s

comm -23 <(sort a.txt) <(sort b.txt)
# ~0.2s

diff a.txt b.txt
# ~2.6s

sdiff a.txt b.txt
# ~2.7s

vimdiff a.txt b.txt
# ~3.2s

comm반면, 훨씬 빠른 것 같다 git diff --no-index나타납니다이 사랑하는 스타일의 출력을위한 가장 빠른 방법이 될 수 있습니다.


2018-03-25 업데이트--no-index git 저장소 안에 있고 해당 저장소 내에서 추적되지 않은 파일을 비교하지 않는 한 실제로 플래그를 생략 할 수 있습니다 . 에서 맨 페이지 :

이 형식은 파일 시스템에서 주어진 두 경로를 비교하는 것입니다. Git으로 제어되는 작업 트리에서 명령을 실행하고 경로 중 하나 이상이 작업 트리 외부를 가리 키거나 Git에서 제어하는 ​​작업 트리 외부에서 명령을 실행할 때 –no-index 옵션을 생략 할 수 있습니다.


답변

다음을 사용할 수도 있습니다 : colordiff : DIFF의 표시 출력을 색상.

vimdiff 정보 : SSH를 통해 파일을 비교할 수 있습니다. 예를 들면 다음과 같습니다.

vimdiff /var/log/secure scp://192.168.1.25/var/log/secure

http://www.sysadmit.com/2016/05/linux-diferencias-entre-dos-archivos.html 에서 추출


답변

또한 mcdiff를 잊지 마십시오 -GNU Midnight Commander 의 내부 diff 뷰어 .

예를 들면 다음과 같습니다.

mcdiff file1 file2

즐겨!