くんすとの備忘録

IT系技術メモ

移転しました。

15秒後に自動的にリダイレクトします。

commコマンドのつかいかた

昨日のシェル芸ヴェンキョウカイ(問2)で話題になった、commコマンドについて。
自分はたまたま先週使ったことがあって知ってたんですが、シェル芸ヴェンキョウカイで初めて知った!っていう人もいたみたいだし、せっかくなので使い方をまとめておきます。

内容

commコマンドとは

名称

comm − 2つのファイルの共通な行もしくは共通でない行を出力する

書式

comm [−123i] file1 file2

解説

comm ユーティリティは、 file1 と file2 を読み込んで(辞書的にソートされて いる必要があります)、 3 つのテキストカラムを出力します: それぞれ、 file1 のみにある行; file2 のみにある行; 両方のファイルにある行です。

オプションなしで試してみましょう。

  • file1
% sort a
分倍河原
川崎
谷保
鹿島田
  • file2
% sort b
分倍河原
南多摩
登戸
谷保

ソートしてcommに食わせます。

% comm <(sort a) <(sort b)
                分倍河原
        南多摩
川崎
        登戸
                谷保
鹿島田

3列の出力が得られます。空の部分には、1列につき1つのtab(\t)が詰まっています。

各列の意味は

  • 1列目 … file1 のみにある行
  • 2列目 … file2 のみにある行
  • 3列目 … 両方にある行

となっています。

オプション

  • -1オプション … 1列目を表示しない (2列目と3列目を表示)
  • -2オプション … 2列目を表示しない (1列目と3列目を表示)
  • -3オプション … 3列目を表示しない (1列目と2列目を表示)

組み合わせも可能で、

  • -12オプション … 1列目と2列目を表示しない (3列目だけ表示)
  • -13オプション … 1列目と3列目を表示しない (2列目だけ表示)
  • -23オプション … 2列目と3列目を表示しない (1列目だけ表示)
  • -123オプション … 1列目と2列目と3列目を表示しない (何も出さない)

となります。

オプションの実行例

  • 2列目を表示しない (1列目と3列目を表示)
% comm -2 <(sort a) <(sort b)
        分倍河原
川崎
        谷保
鹿島田
  • 1列目と2列目を表示しない (3列目だけ表示)
% comm -12 <(sort a) <(sort b)
分倍河原
谷保

スキップされた列・行は詰められるみたいです。


以上!