あまり知られていないユーティリティの使用:
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==NR
file1 を読み取っている場合にのみ true$0
現在のテキスト行ですa[$0]
キーが現在のテキスト行に設定されたハッシュですa[$0]++
現在のテキスト行を見たことを追跡します!($0 in a)
行のテキストを見ていない場合にのみ true- 上記のパターンが true を返す場合、テキスト行を出力します。これは、明示的なアクションが指定されていない場合の awk のデフォルトの動作です