긴 한 줄 파일에서 diff 사용

긴 한 줄 파일에서 diff 사용

한 줄만 있는 파일이 있습니다. 크기는 약 20,000바이트입니다.

파일이 수정되었는데 어디에 있는지 알고 싶었습니다.

diff를 사용한다고 생각했는데 차이점이 있는 줄을 출력하기 때문에 완전한 줄이 표시됩니다. 하지만 이 경우에는 파일에서 차이점이 있는 유일한 줄입니다.

그래서 차이점이 무엇인지 알고 싶었습니다.

어떤 충고?

답변1

일반 텍스트처럼 공백이 많다고 가정하면 파일을 단어별로 분할하고 이를 meld와 같은 일반 diff 도구와 비교할 수 있습니다.

tr -s ' ' '\n' < file1.txt > file1.txt.split
tr -s ' ' '\n' < file2.txt > file2.txt.split
meld file1.txt.split file2.txt.split

답변2

라인 내 diff를 수행하는 diff를 찾을 것입니다. 나는 사용한다xxdiff유닉스에서. 제 생각에는WinMergeWindows에서는 라인 내 diff를 수행합니다.

다른 답변도 좋습니다: wdiff 또는 청크로 나누기 - 데이터가 파이프나 쉼표로 구분되어 있으면 청크 경계를 정의하기가 더 쉽습니다.

답변3

이것이 일회성 문제인 경우 \n50자마다 문자가 삽입된 파일의 복사본을 만든 다음 해당 복사본을 비교합니다. (50을 선택하면 원본 파일의 다른 줄 번호에서 바이트 오프셋까지 계산하기가 쉬워지지만 내가 찾은 내용에 따라 위/아래로 조정할 수 있습니다.)

답변4

예를 들어 한 문자만 다른 긴 줄이 있는 2개의 파일이 있는 경우 출력을 파이프로 연결하여 변경된 줄과 변경 사항을 필터링한 다음 다시 통해 마지막 80개만 표시할 수 있습니다 git diff. 각 줄의 문자:--word-diff=porcelaingrepgrep

echo {1..4000} A {4001..8000} > a.tmp
echo {1..4000} B {4001..8000} > b.tmp

> git diff -U0 --word-diff=porcelain a.tmp b.tmp | grep -A3 '@@' | egrep -o '.{1,80}$'
@@ -1 +1 @@
3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000
-A
+B

관련 정보