web-dev-qa-db-ja.com

2つのファイルを比較し、一致しない行を印刷する

以下のデータを含む2つのファイルがあります。 2つのファイルの違いが必要です。

私はdiffを試してみましたが、2つのファイルに共通する行も表示されます:(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番目のファイル:(ファイル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
6
Sak

これはcommを使用する絶好の機会のようです。

$ 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
14
James Andariese

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/.../test.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

3
iyrin