
二つのファイルの共通行(または共通しない行)を得る
例えば、サービスAでは登録されているけれどもサービスBには登録されていないユーザの一覧を得たい、という様な場合。もちろんdiffでよしなにやることもできますが、commも便利です。 例えば次の様にリストがあるとします。 サービスAのユーザーリスト(users_a.txt): alice bob charlie dave oscar サービスBのユーザーリスト(users_b.txt): charlie isaac justin mallory oscar これらに対してcommを使うと次の出力が得られます: $ comm users_a.txt users_b.txt alice bob charlie dave isaac justin mallory oscar TABで揃えられた列がそれぞれ左から、Aにだけ存在する行、Bにだけ存在する行、Cにだけ存在する行、となっています。これだけだと別にそれほど便利ではないんですが、commはそれぞれの行を非表示にする事もできます。それぞれ、非表示にしたい行を-1 -2 -3で指定します。 Aだけに存在する行を表示する: $ comm -23 users_a.txt users_b.txt alice bob dave 両方に存在する行を表示する: $ comm -12 users_a.txt users_b.txt charlie oscar diffだとdiffの後にgrepやらなんやらして必要な物を抜き出す必要があるでしょうから、これは楽ですね。 もちろん、diffの様に他のコマンドの標準出力を取ることもできます。 例えばhttps://example.com/api/users_b.txtが先ほどのusers_b.txtと同じ内容を返すとするとしてAだけに登録しているユーザーを取得したい場合 $ curl -s https://example.com/api | comm -23 users_a.txt - alice bob dave とできますし、2つのユーザーリストを返すAPIが有ったとして、共通のユーザーを一覧にしたい場合、次の様にできます: $ curl https://example1.com/users | jq . [ { "username": "alice" }, { "username": "bob" }, { "username": "charlie" }, { "username": "dave" }, { "username": "oscar" } ] $ curl https://example2....