別のファイルでdiffを使用して異なる行のみを表示するにはどうすればよいですか?
たとえば、ファイル番号1には次の行が含まれています。
1;john;125;3
1;tom;56;2
2;jack;10;5
ファイル番号2には、次の行が含まれています。
1;john;125;3
1;tom;58;2
2;jack;10;5
次のことを実現する方法は?
1;tom;58;2
a.txt:
1;john;125;3
1;tom;56;2
2;jack;10;5
b.txt:
1;john;125;3
1;tom;58;2
2;jack;10;5
通信を使用する:
comm -13 a.txt b.txt
1;tom;58;2
のコマンドラインオプションcomm
は非常に簡単です。
-1列1を抑制します(FILE1に固有の行)
-2列2を抑制します(FILE2に固有の行)
-3列3(両方のファイルに表示される行)を抑制します
ファイル2に固有の行のみを保持したい場合は、次のことができます。
comm -13 file1 file2
このcomm
コマンドは、2つのファイルがソートされた順序であると想定していることに注意してください。
これが私がより良いと思う簡単な解決策ですdiff
:
sort file1 file2 | uniq -u
sort file1 file2
2つのファイルを連結して並べ替えますuniq -u
(繰り返されない)一意の行を印刷します。入力を事前にソートする必要があります。グループフォーマット指定子を使用すると、変更されていない行の印刷を抑制し、変更された行のみを変更された行に対して印刷できます。
diff --changed-group-format="%>" --unchanged-group-format="" file1 file2