以下のデータを含む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
これは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
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