다음 내용을 포함하는 두 개의 파일이 있다고 가정해 보겠습니다.
$ cat File1.txt
Apple
orange
watermelon
avocado
lime
$ cat File2.txt
orange
Apple
lime
watermelon
avocado
둘 다 동일한 값을 갖기 때문에 기본적으로 차이는 없습니다. 나는 diff
다음 명령을 사용하고 있습니다 :
diff File1.txt File2.txt
잘못된 값으로 인해 파일이 다르다는 것을 보여줍니다. 제 경우에는 차이가 표시되지 않아야 합니다. 이를 달성할 수 있는 다른 방법이 있습니까? 어떤 제안이라도 환영합니다.
답변1
정렬된 파일을 비교합니다.
Bash(또는 ksh 또는 zsh)에서는 다음을 사용합니다.프로세스 교체:
diff <(sort File1.txt) <(sort File2.txt)
간단히 말해서:
sort File1.txt >File1.txt.sorted
sort File1.txt >File2.txt.sorted
diff File1.txt.sorted File2.txt.sorted
정렬된 파일 간의 차이점을 빠르게 확인하려면,comm
유용할 수 있습니다. 한 파일의 행을 직접 표시하지만 다른 파일의 행은 표시하지 않습니다.
comm -12 <(sort File1.txt) <(sort File2.txt) >common-lines.txt
comm -23 <(sort File1.txt) <(sort File2.txt) >only-in-file-1.txt
comm -13 <(sort File1.txt) <(sort File2.txt) >only-in-file-2.txt
동일한 파일에서 한 줄이 반복되는 경우 위 명령은 두 파일의 반복 횟수가 동일하다고 주장합니다. 치료를 원하시면
foo
bar
foo
같은
bar
foo
그런 다음 정렬 시 중복 항목을 제거하세요. sort -u
대신 사용하세요 sort
.
한 파일의 출력을 저장 sort
하고 나중에 다른 파일을 사용할 수 있을 때 이를 사용하는 경우 두 파일 모두 동일한 로케일로 정렬되어야 합니다. 이렇게 하면 아마도 바이트 순서로 정렬해야 합니다.
LC_ALL=C sort File1.txt >File1.txt.sorted
답변2
먼저 파일을 정렬합니다( bash
).
diff <(sort file1) <(sort file2)
답변3
awk를 사용하면 다음과 같은 명령을 사용하여 각 텍스트 입력 줄에 대한 해시 인덱스를 만들 수 있습니다.
awk 'The magic' Q=A fileA Q=B fileB Q=C fileC ...
각 입력 라인의 "마법"은 다음과 같습니다.
{ X[$0] = X[$0] Q; }
END 조건에 도달하면 X의 인덱스를 반복합니다. 각 파일에 한 번만 나타나는 줄은 다음과 같습니다.
X["Apple"] = "ABC";
fileA에서 한 번 발생하고 fileC에서 세 번 발생하는 줄은 "ACCC"로 표시됩니다. 원하는 방식으로 파일 수에 관계없이 모든 이상 현상을 보고할 수 있습니다. (저는 각각 라이브 데이터베이스와 Oracle 데이터베이스가 있는 기본 서버와 대기 서버에서 실행되는 안전이 중요한 시스템을 14방향으로 비교해야 했습니다.)
각 레이블에 줄 번호 NR을 포함하고 흥미로운 패턴을 작성하면 레이블을 다음과 같이 만들 수 있습니다.
X["Walrus"] = "A347B38C90"
각 파일의 어느 줄에 일치하는 텍스트가 있는지 보고합니다.