
次のデータを含む2つのファイルがあります。両方のファイルの違いが必要です。
私はそれを試しましたが、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番目のファイル:(ファイル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
この情報を使用して、2つのファイルの行だけでなく、一意の行も削除できます。
$ 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