압축 된 나란히 다른 diff 형식이 있습니까?


40

수천 줄의 로그 파일이 두 개 있습니다. 전처리 후 일부 라인 만 다릅니다. 이 나머지 선은 실제 차이이거나 섞인 선 그룹입니다.

통합 된 diff를 사용하면 자세한 차이점을 볼 수 있지만 안구와의 수동 비교가 어렵습니다. 병렬 diff는 비교에 더 유용 해 보이지만 수천 개의 변경되지 않은 선을 추가합니다. 두 세계를 모두 활용할 수있는 방법이 있습니까?

이 로그 파일은 xscopeXorg 프로토콜 데이터를 모니터하는 프로그램으로 생성됩니다 . 예를 들어 특수 웹 서버 액세스 로그 분석 도구가 아닌 위와 유사한 상황에 적용될 수있는 범용 도구를 찾고 있습니다.


http://lekensteyn.nl/files/qemu-sdl-debug/ ( log13log14) 에서 두 가지 예제 로그 파일을 사용할 수 있습니다 . xscope-filter타임 스탬프 및 기타 사소한 세부 사항을 제거 하는 파일 에서 전 처리기 명령을 찾을 수 있습니다 .


2
당신 diff--suppress-common-lines선택권이 있습니까? pastebin.com/KZrVCNFR
manatwork

1
@manatwork 좋네요. 더 많은 컨텍스트를 추가하는 방법 (예 : 줄 번호)?
Lekensteyn 2016 년

5
그런 다음 vimdiff( vim 패키지에서) 병렬 디스플레이, 색상 표시, 공통 선 접기 등의 요구를 더 잘 충족시킬 수 있습니다. 로 줄 번호를 켤 수 있습니다 :set number.
manatwork

나는 당신이 대답으로 vimdiff를 올려야한다고 생각합니다 :)
Kotte

1
CLI 툴이 선호되지만 GUI 툴도 충분히 작 으면 허용됩니다. kdiff3을 사용해 보았지만 여전히 세부적으로 생성되었습니다. 이상적으로는 불필요한 세부 사항이 모두 표시되지 않습니다. 두 개의 데이터 세트를 첨부하겠습니다.
Lekensteyn 2016 년

답변:


37

내가 가장 많이 사용하는 2 개의 diff 도구는 meld and sdiff 입니다.

녹다

Meld는 GUI이지만 파일 간 차이점을 표시하는 데 큰 역할을합니다. 한 쪽에서 다른쪽으로 변경 사항을 이동하여 변경 사항을 병합하는 기능과 같은 기능을 통해 소프트웨어 개발에 더 적합하지만, 나란히 확산 도구로 사용할 수 있습니다.

    멜스의 ss

    ss of meld code highlighting

sdiff

이 도구를 몇 년 동안 사용해 왔습니다. 나는 일반적으로 다음 스위치로 실행합니다.

$ sdiff -bBWs file1 file2
  • -b 공백 양의 변화를 무시하십시오.
  • -W 모든 공백을 무시하십시오.
  • -B 행이 모두 비어있는 변경 사항은 무시하십시오.
  • -s 공통 라인을 출력하지 마십시오.

로그 파일을 사용하면 열 너비를 넓히고 -w <num>화면을 넓히는 데 사용할 수 있습니다 .

내가 사용하는 다른 도구

diffc

Diffc 는 통합 diff 출력을 채색하는 python 스크립트입니다.

$ diffc [OPTION] FILE1 FILE2

             diffc의 ss

Vimdiff

Vimdiff 는 아마도 meld보다 좋지 않으면 좋을 것이며 터미널에서 실행할 수 있습니다. 나는 항상 도구를 사용하는 것을 잊어 버린다.하지만 나에게는 도구가 매일 사용하기가 조금 힘들다는 것을 알 수있는 좋은 지표이다. 그러나 YMMV.

                                    vimdiff의 ss


1
불행히도 스크린 샷에 표시되지 않는 Meld의 한 가지 위대한 기능 은 소스 코드 파일의 구문 강조 입니다.
manatwork

예. 나는 항상 vimdiff를 사용했고, 이후 meld를 사용하기 시작했으며, 사용하기가 더 쉬우 며 vimdiff와 나에게 무엇을 말하고 있는지 쉽게 알 수 있습니다.
slm

@manatwork-피드백에 대한 답변에 대한 링크를 추가했습니다.
slm

1
소스 코드는 훌륭하지만 로그 파일을 비교하는 것은 그리 좋지 않습니다. 내가 자주 사용 colordiff에서 colordiff.org 소스 파일에 대해. 나의 이해에, sdiff유사하다 diff -y없이 출력의 차이 만 약간 다른 옵션. 일반 diff에 대한 좋은 대안을 보여준 +1
Lekensteyn 2016 년

나는 colordiff를 사용하지 않았으므로 확인해야합니다. 에 맞습니다 diff -y. 그 스위치를 추가하면 diff어느 시점에서 일어난 것처럼 보이거나 전혀 눈치 채지 못했습니다. 또한 여기에 gnu diff tools 리소스 페이지 링크가 있습니다. 이 도구 모음을 사용하는 데 유용한 도구입니다.
slm

20

현재 grep이 다른 줄을 필터링하면서 나란히 diff를 사용하고 있습니다.

diff -y -W250 log.txt log2.txt | expand | \
    grep -E -C3 '^.{123} [|<>]( |$)' | colordiff | less -rS
  • 옵션 -W250은 더 많은 데이터를 볼 수 있도록 출력을 넓 힙니다.
  • expand 탭을 공백으로 변환하는 데 필요합니다
  • -C3 grep 출력에 3 줄의 컨텍스트를 추가합니다.
  • ^.{123} side-by-side diff 마커 앞에있는 데이터의 절반과 일치합니다.
  • colordiff 출력을 더 예쁘게 만듭니다.
  • less -rSANSI 색상을 해석하고 ( -r) 줄 바꿈을 방지 -S합니다.

이것은 해킹입니다, 대안은 환영합니다.


1
훌륭합니다.
Pat Myron

좋은 생각. 불행히도 grep정규 표현식이 너무 느립니다. 탭을 확장 diff하는 -t옵션 도 있습니다 .
Timmmm


0

linux "sdiff"명령은 기본적으로 모든 줄을 포함하여 나란히 차이점을 보여 주지만 다양한 옵션을 사용하여 차이점 만 표시 할 수 있습니다.

sdiff -tWBs -w $COLUMNS config.xml config.xml.original

어디

-t : 탭을 공백으로 변환

-W : 공백 차이 무시

-B : 빈 줄 무시

-s : 같은 줄을 무시

-w $ COLUMNS : 전체 화면 너비 사용

표시된 줄은 |, <또는>로 나뉩니다. 설명서를 참조하거나 시도하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.