두 파일을 비교하고 일치하지 않는 줄을 인쇄합니다.

두 파일을 비교하고 일치하지 않는 줄을 인쇄합니다.

다음 데이터가 포함된 두 개의 파일이 있습니다. 두 파일의 차이점이 필요합니다.

나는 그것을 시도했지만 diff두 파일 모두에 공통 줄도 표시됩니다 (22372 Dec 4 15:36 /opt/apache-tomcat-6.0.36/webapps/new/new.txt).

첫 번째 파일: (파일 1에도 여러 데이터가 있습니다)

22677 Dec 4 15:36 /opt/apache-tomcat-6.0.36/webapps/new/abc.txt

22372 Dec 4 15:36 /opt/apache-tomcat-6.0.36/webapps/new/new.txt

두 번째 파일: (파일 2에도 여러 데이터가 있습니다).

22372 Dec 4 15:36 /opt/apache-tomcat-6.0.36/webapps/new/new.txt

22677 Dec 3 15:36 /opt/apache-tomcat-6.0.36/webapps/new/abc.txt

12344 Dec 10 15:36 /opt/apache-tomcat-6.0.36/webapps/abc/.../test.txt

다음 출력이 필요합니다.

22677 Dec 3 15:36 /opt/apache-tomcat-6.0.36/webapps/new/abc.txt

12344 Dec 10 15:36 /opt/apache-tomcat-6.0.36/webapps/abc/.../test.txt

답변1

이것은 통신을 사용할 수 있는 완벽한 기회인 것 같습니다.

GNU coreutils 매뉴얼 페이지(v8.30)에서:

With  no  options,  produce  three-column  output.  Column one contains
lines unique to FILE1, column two contains lines unique to  FILE2,  and
   column three contains lines common to both files.

   -1     suppress column 1 (lines unique to FILE1)

   -2     suppress column 2 (lines unique to FILE2)

   -3     suppress column 3 (lines that appear in both files)

file1이 정보를 사용하여 두 파일에 있는 줄뿐만 아니라 고유한 줄도 삭제할 수 있습니다 .

$ comm -1 -3 <(sort file1) <(sort file2)
12344 Dec 10 15:36 /opt/apache-tomcat-6.0.36/webapps/abc/.../test.txt
22677 Dec 3 15:36 /opt/apache-tomcat-6.0.36/webapps/new/abc.txt

-1 및 -3은 파일 1에 고유한 모든 줄과 두 파일 모두에 공통된 모든 줄을 삭제합니다.

정렬로 인해 출력 순서가 변경되지만 질문에 따른 고려 사항은 아닌 것 같습니다.

입력이 이미 정렬된 경우 정렬을 건너뛸 수 있습니다.

$ comm -1 -3 file1 file2

답변2

사용diff -u file1 file2 | sed -nr 's/^+([^+].*)/\1/p'

산출:

22677 12월 3일 15:36 /opt/apache-tomcat-6.0.36/webapps/new/abc.txt
12344 12월 10일 15:36 /opt/apache-tomcat-6.0.36/webapps/abc/.. /시험 . txt

그들 사이에 빈 줄이 필요하면 다음을 사용하십시오.
diff -u file1 file2 | sed -nr 's/^+([^+].*)/\1\n/p'

산출:

22677 12월 3일, 15:36 /opt/apache-tomcat-6.0.36/webapps/new/abc.txt

12344 12월 10일, 15:36 /opt/apache-tomcat-6.0.36/webapps/abc/.../test.txt

관련 정보