コマンドの出力や設定ファイル、データファイルを少し加工したいときに便利なコマンドに「cut」がある。ちょっとした機能だが、知っていると意外と便利だ。今回は、このコマンドcutを紹介しよう。

特定の部分を切り出す「cut」

cutコマンドの便利さを最も感じるのは、特定のデリミタ(区切り文字)で区切られたデータを扱うケースだ。以下に示す/etc/passwdファイルは、システムのアカウントデータが記載されたもので、「:(コロン)」で各フィールドが区切られている。

「:」で区切られた/etc/passwdファイル

cutコマンドではオプション「-d」でデリミタを指定するようになっている。/etc/passwdファイルの場合は、「:」がデリミタになっているので、「-d :」のように指定すればよい。また、表示する列はオプション「-f」で指定できるので、次のように「cut -d : -f 1 /etc/passwd」とコマンドを実行すれば、アカウントデータの最初の1列目だけを表示させるといったことができる。

/etc/passwdファイルの1列目のみを表示させた場合。ユーザー名だけが表示されている

cutコマンドでは「-f」の指定で複数の列を表示することもできる。例えば、1列目と6列目を表示させるのであれば、「-f 1,6」と指定すればよい。第81回で取り上げたtrコマンドでデリミタをタブに変換すれば、もうちょっと表示が見やすくなるだろう。

cutコマンドで1列目と6列目を表示させた場合

trコマンドでデリミタをタブに変換した結果

カンマ区切りで列を指定可能となっており、「-」で列をつなぐとその範囲を指定することができる。つまり、「-f 1-5」という指定は「-f 1,2,3,4,5」という指定と同じことを意味する。また、オプション「-c」を指定すると文字数で出力を区切ることもできる。例えば、「-c 1-30」のようにすると1文字目から30文字目までを切り出して出力する。

「-f 1-5」で1列目から5列目までを出力させた場合

オプション「-c」で文字数を指定して切り出しを行える

cutコマンドでは、例えば次のようにデリミタ「:」でデータを切り出してホームディレクトリを切り出し、今度はデリミタ「/」でパスからディレクトリ名を切り出すといったことも可能だ。

cutコマンドを使って「/etc/passwd」からホームディレクトリを取り出す

ルートディレクトリ直下のディレクトリだけ抜き出し、重複を排除して表示するようにした

このように、cutコマンドを使うとデータから特定の部分だけ抜き出して表示したり、コマンドの出力の一部だけを抜き出したりすることができる。sedコマンドやawkコマンドを使っても似たようなことはできるのだが、cutコマンドで済むのであれば、こちらのほうがやりやすいケースが多い。

また、厳密にデータを抜き出すことはできないが、CSVのようにカンマ区切りのデータから特定のデータを取り出すといったこともcutコマンドを使うと簡単に実施できる。慣れるとちょっとした作業で便利なコマンドなので、ぜひ使い方を覚えてもらえればと思う。