あまり知られていないユーティリティの使用:
sort file1 > file1.sorted
sort file2 > file2.sorted
comm -1 -3 file1.sorted file2.sorted
これは重複を出力するので、1 3 の場合 file1 で 、しかし file2 で 2 、これはまだ 1 3 を出力します .これが望ましくない場合は、sort からの出力をパイプします。 uniq まで ファイルに書き込む前に:
sort file1 | uniq > file1.sorted
sort file2 | uniq > file2.sorted
comm -1 -3 file1.sorted file2.sorted
GNU coreutils パッケージには、あらゆる種類のテキスト操作を可能にする多くのユーティリティがあります。
$ awk 'FNR==NR {a[$0]++; next} !($0 in a)' file1 file2
6
7
コードの仕組みの説明:
- ファイル 1 に取り組んでいる場合は、表示されるテキストの各行を追跡します。
- ファイル 2 で作業していて、行のテキストが表示されていない場合は、それを印刷してください。
詳細の説明:
FNR現在のファイルのレコード番号ですNRすべての入力ファイルからの現在の全体的なレコード番号ですFNR==NRfile1 を読み取っている場合にのみ true$0現在のテキスト行ですa[$0]キーが現在のテキスト行に設定されたハッシュですa[$0]++現在のテキスト行を見たことを追跡します!($0 in a)行のテキストを見ていない場合にのみ true- 上記のパターンが true を返す場合、テキスト行を出力します。これは、明示的なアクションが指定されていない場合の awk のデフォルトの動作です