열을 제외할 수 있는 diff 유틸리티가 있습니까?

열을 제외할 수 있는 diff 유틸리티가 있습니까?

예를 들어 텍스트 파일이 있는데 각 줄은 긴 문자열입니다. 이 문자열의 2개 "세그먼트"(예: 열 1-7 및 20-22)를 제외하고 싶습니다. 따라서 아래 두 줄은 일치합니다.

123456789012345678901234567890 
------------------------------
xxxxxxxAAAAAAAAAAAAxxxBBBBBBBB
yyyyyyyAAAAAAAAAAAAyyyBBBBBBBB

WinMerge에 "IgnoreColumns" 플러그인이 있다는 것을 알고 있지만 이 플러그인을 사용해 본 적이 없습니다. 이 예에서는 이름을 IgnoreColumns_1-7, 20-22.dll로 바꾸고 플러그인 메뉴에서 선택한 다음 "Pre-Differ"를 선택합니다. 하지만 그것은 효과가 없었습니다.

수정하고 싶지 않은 대용량 파일을 비교할 예정입니다. 나는 sed 또는 이와 유사한 것과 비교할 때 스트림 편집을 반대하지는 않지만 실제 파일을 수정하지 않는 것을 선호합니다. 나는 데이터를 좀 더 시각적으로 볼 수 있기를 바랐기 때문에 아직 sed에 diff를 제공하는 것을 선택하지 않았습니다.

답변1

다음은 Linux 및 Cygwin에서 작동합니다.

vimdiff <(cut -c8-19,23- file1) <(cut -c8-19,23- file2)

어떤 이유로 Cygwin에서 Vim은 편집이 시작된 이후 각 파일이 변경되었음을 알리고 "[O]K, (L)oad File:"이라고 묻습니다. O매번 입력하면 됩니다 .

생략된 열을 볼 수는 없지만 시각적으로 나란히 비교한 것입니다.

답변2

여전히 WinMerge "IgnoreColumns" 플러그인을 작동시키길 원하신다면... 이제 거의 완료하신 것 같습니다. 두 가지 참고사항:

  1. 예를 들어 WinMerge의 MergePlugins하위 폴더 에서 공백 없이 쉼표 대신 밑줄을 사용하여 복사 IgnoreColumns.dll합니다 .IgnoreColumns_1-7_20-22.dll

  2. WinMerge를 완전히 종료하고 해당 DLL을 배치한 후 다시 실행하세요. ("플러그인 다시 로드"는 Plug-ins/ List풀다운 메뉴를 업데이트 하지만 기능은 업데이트하지 않습니다.)

참고 사항: 3방향 비교가 포함된 WinMerge의 "지원되지만 비공식" 버전인 2.13.20.12를 권장합니다. 이동비공식 WinMerge 빌드, 하단에 "3-way diff 지원 버전"이 표시됩니다.

답변3

Diogo_Rocha의 답변과 마찬가지로 파일을 미리 수정하여 테스트하고 싶지 않은 열을 제거한 다음 diff를 실행할 수 있습니다. 하지만 명령줄만 있으면 됩니다.

따라서 예를 들어 '열' 1-7 및 20-22를 제거할 수 있습니다.

sed 's/.\{7\}\(.\{12\}\).\{3\}\(.*\)/\1\2/' test.txt > test2.txt
diff -u test2.txt whatnot.txt

편집하다:garyjohn의 더 나은 답변을 노골적으로 도둑질하는 것입니다.

diff -u <(cut -c8-19,23- test1.txt) <(cut -c8-19,23- test2.txt) | less

답변4

귀하의 의심을 이해할 수 있다면 텍스트 파일에서 특정 열을 제외하거나 선택하려고 하는 것입니다. 그것이 사실이라면, 당신은 그것을 할 수 있습니다텍스트 패드애플리케이션. 이를 설치하고 텍스트 파일을 연 다음 텍스트에서 특정 열을 선택하는 동시에 "Alt" 키를 누르십시오. 이 열을 선택하면 필요한 각 열을 복사, 잘라내기 또는 삭제할 수 있습니다.

관련 정보