Linuxコマンドcutの使い方と5つのオプション

Linuxコマンドcutは、ファイルから特定の列やフィールドを抽出したい場合に便利に使用できます。このコマンドは、テキストデータを扱う際に非常に有用で、特にデータが区切り文字で分割されている場合、特定のフィールドだけを取り出すのに優れた性能を発揮します。この記事では、cutコマンドの基本的な使い方とさまざまなオプションについて解説します。

Linuxコマンドcutとは?

cutは、テキストファイルから特定の列やフィールドを抽出するために使用されるLinuxコマンドです。ファイルの内容が一定の区切り文字(delimiter)で区切られている場合、必要な部分だけを取り出す機能を提供します。例えば、CSVファイルから特定の列だけを抽出する場合に役立ちます。

基本構文

cutコマンドの基本的な使用方法は次の通りです。

cut [オプション] [ファイル名]
ShellScript

オプションを使用して列(カラム)やフィールドを指定し、ファイル名を入力すると、そのファイルから特定の列やフィールドが出力されます。オプションは必須であり、オプションを使用しない場合は何も出力されないので注意が必要です。

主要オプション

-f(フィールド選択)

-fオプションは、区切り文字で分割されたテキストファイルから特定のフィールドを選択する際に使用します。このオプションは主に-dオプションと一緒に使用されます。-dオプションは区切り文字を設定するためのオプションで、デフォルトではタブ(tab)が区切り文字として設定されていますが、カンマ(,)、セミコロン(;)、スペース( )などを区切り文字として指定することができます。

cut -f 2 -d ',' example.csv
ShellScript

このコマンドは、example.csvファイルからカンマ(,)で区切られた2番目のフィールドを抽出する例です。以下はexample.csvの内容です。

Name,Age
Freud,23
Rachel,37
Mary,59
Adler,93
example.csv

そして、cutコマンドを実行した結果は以下の通りです。

図1. Linuxコマンドcut -fオプションと-dオプションを使用してCSVファイルの2番目の列を出力
図1. Linuxコマンドcut -fオプションと-dオプションを使用してCSVファイルの2番目の列を出力

-d(区切り文字設定)

-dオプションは、フィールドを区切る文字を指定するために使用されます。デフォルトでは、cutコマンドはタブ(tab)文字を区切り文字として認識します。しかし、CSVファイルや他の区切り文字を使用しているファイルを扱う場合は、直接区切り文字を設定する必要があります。

cut -f 1 -d ':' /etc/passwd
ShellScript

このコマンドは、/etc/passwdファイルからコロン(:)を区切り文字として設定し、最初のフィールドを出力する例です。/etc/passwdファイルは、ユーザー情報がコロンで区切られているため、この場合に便利です。以下は/etc/passwdファイルの最初の列を出力した結果です。

図2. Linuxコマンドcut -dオプションを使用して区切り文字を設定し、/etc/passwdの最初の列を出力
図2. Linuxコマンドcut -dオプションを使用して区切り文字を設定し、/etc/passwdの最初の列を出力

-c(文字単位抽出)

-cオプションは、特定の列ではなく、文字(character)単位でデータを抽出したい場合に使用します。例えば、すべての行の最初の文字から3番目までを抽出したい場合、次のようにコマンドを使用します。

cut -c 1-3 example.txt
ShellScript

このコマンドは、example.txtファイルから各行の最初から3番目までの文字を出力します。ファイルの構造が一定のパターンを持っている場合、このオプションは便利です。以下の図は、/etc/passwdを対象に実行した例です。

図3. Linuxコマンドcut -cオプションを使用して、すべての行の1~3文字目だけを出力
図3. Linuxコマンドcut -cオプションを使用して、すべての行の1~3文字目だけを出力

–complement(選択項目の除外)

–complementオプションは、指定したフィールドや文字を除外して残りを出力したい場合に使用します。例えば、2番目のフィールドを除外して、すべてのフィールドを出力したい場合は、次のようにコマンドを入力します。

cut -f 2 --complement -d ',' example.csv
ShellScript

このコマンドは、example.csvファイルから2番目のフィールドを除外して、残りのフィールドを出力します。特定のデータを除外して、他のデータを確認したい場合に便利です。

図4. Linuxコマンドcut --complementオプションを使用して、指定したフィールドを除外して出力
図4. Linuxコマンドcut –complementオプションを使用して、指定したフィールドを除外して出力

–output-delimiter(出力区切り文字設定)

複数のフィールドを指定したい場合、以下の図のようにカンマ(,)で区切って指定することができます。また、-f 1-5のように範囲を指定することも可能です。区切り文字は、入力の区切り文字である’,’がそのまま出力されていることがわかります。

図5. Linuxコマンドcut -fオプションを使用して複数のフィールドを選択
図5. Linuxコマンドcut -fオプションを使用して複数のフィールドを選択

上記の図のように、cutコマンドは基本的に出力時に入力の区切り文字をそのまま使用します。しかし、–output-delimiterオプションを使用すると、出力区切り文字を別途設定することができます。

cut -f 1,2 -d ',' --output-delimiter='|' example.csv
ShellScript

このコマンドは、example.csvファイルから最初と2番目のフィールドを抽出し、それをパイプ(|)記号で区切って出力する例です。出力形式を変更したい場合に非常に便利なオプションです。

図6. Linuxコマンドcut --output-delimiterで出力区切り文字を設定
図6. Linuxコマンドcut –output-delimiterで出力区切り文字を設定

注意事項

  • 区切り文字を明確に設定すること:cutコマンドはデフォルトでタブ(tab)を区切り文字として使用するため、CSVファイルや他の区切り文字が使用されたファイルを扱う場合は、必ず-dオプションを使用して区切り文字を指定する必要があります。
  • 空フィールドの処理:フィールドが空の場合でも、cutコマンドはこれを認識し、空のフィールドとして出力します。空のフィールドを処理する他のコマンドと組み合わせて使用することをお勧めします。
  • ファイル形式に注意:cutコマンドは固定された区切り文字に基づいて動作するため、区切り文字が一定していないファイルでは正確な結果が得られません。このような場合には、awksedなどの他のテキスト処理コマンドを使用することをお勧めします。

まとめ

cutコマンドは、Linuxでテキストファイルを扱う際に非常に便利なツールです。特に、区切り文字で分割されたデータを処理する場合、必要なフィールドや列を簡単に抽出することができます。-f、-d、-cなどのオプションをうまく活用することで、複雑なテキストファイルからも必要な情報をきれいに抽出できます。ただし、ファイルの区切り文字や形式が明確でない場合、設定を誤ると期待した結果が得られない可能性があるため、注意が必要です。cutコマンドを習得すれば、データ処理の作業が一層スムーズになるでしょう。

リファレンス

関連ポスト

コメントする