cutコマンドで特定の列だけを抽出する方法

先生

Linuxの達人への道!cutコマンドでテキストデータを自由自在に切り刻もう!

cutコマンドとは?Linux/Unixでテキストデータを操る

LinuxやUnix環境でテキストデータを扱う際、cutコマンドは非常に強力なツールです。特に、スペースやカンマなどで区切られたテキストファイルから、特定の列(フィールド)だけを抽出したい場合に便利です。この記事では、cutコマンドの基本的な使い方から応用まで、具体的な例を交えて解説します。

cutコマンドは、ファイルや標準入力から指定された部分(列、文字など)を切り取り、標準出力に出力します。データ分析、ログ解析、テキスト処理など、様々な場面で役立ちます。

基本的な構文は以下の通りです。

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

主なオプションには、以下のようなものがあります。

-d:区切り文字を指定します。デフォルトはタブ文字です。

-f:抽出するフィールド(列)番号を指定します。複数のフィールドを指定する場合は、カンマで区切ります。

-c:抽出する文字位置を指定します。複数の文字位置を指定する場合は、カンマで区切ります。

--complement:指定されたフィールド以外を抽出します。

基本的なcutコマンドの使い方:スペース区切り、カンマ区切り

ここでは、cutコマンドの基本的な使い方を、具体的な例を通して見ていきましょう。

まずは、スペースで区切られたテキストファイルから、特定の列を抽出する例です。

例えば、data.txtというファイルに以下のような内容が書かれているとします。


apple orange banana grape
red green blue yellow
1 2 3 4

このファイルから、1列目と3列目を抽出するには、次のようにコマンドを実行します。

cut -d ' ' -f 1,3 data.txt

このコマンドは、-d ' 'で区切り文字をスペースに指定し、-f 1,3で1列目と3列目を指定しています。実行結果は以下のようになります。


apple banana
red blue
1 3

次に、カンマで区切られたCSVファイルから、特定の列を抽出する例を見てみましょう。

例えば、data.csvというファイルに以下のような内容が書かれているとします。


name,age,city
John,30,New York
Jane,25,London

このファイルから、名前と都市を抽出するには、次のようにコマンドを実行します。

cut -d ',' -f 1,3 data.csv

このコマンドは、-d ','で区切り文字をカンマに指定し、-f 1,3で1列目(名前)と3列目(都市)を指定しています。実行結果は以下のようになります。


name,city
John,New York
Jane,London

応用:文字位置での抽出、–complementオプション

cutコマンドは、列だけでなく、文字位置を指定して抽出することもできます。-cオプションを使用します。

例えば、text.txtというファイルに以下のような内容が書かれているとします。


This is a test string.

このファイルから、1文字目から5文字目を抽出するには、次のようにコマンドを実行します。

cut -c 1-5 text.txt

実行結果は以下のようになります。


This 

--complementオプションを使用すると、指定したフィールド以外のフィールドを抽出できます。

例えば、data.txtというファイルで、-f 2を指定し、--complementオプションをつけると、2列目以外のすべての列が抽出されます。

cut -d ' ' --complement -f 2 data.txt

例えば data.txtが下記の内容だった場合、


apple orange banana grape

実行結果は下記のようになります。


apple banana grape

パイプと組み合わせたcutコマンドの活用

cutコマンドは、パイプ (|) と組み合わせることで、他のコマンドの出力を加工する際に非常に役立ちます。

例えば、ps aux コマンドの出力から、プロセスID(PID)とコマンド名だけを抽出したい場合、次のようにします。

ps aux | awk '{print $2, $11}'

上記のコマンドは、ps auxコマンドの出力をawkコマンドに渡し、2番目と11番目のフィールド(PIDとコマンド名)を抽出しています。

別の例として、ls -l コマンドの出力からファイル名だけを抽出したい場合、次のようにします。

ls -l | awk '{print $9}'

この例では、ls -lコマンドの出力をawkコマンドに渡し、9番目のフィールド(ファイル名)を抽出しています。awkの代わりにcutを利用することも可能です。

ls -l | cut -d ' ' -f 9

参考リンク

まとめ

cutコマンドは、テキストデータから特定の列を抽出するための強力なツールです。区切り文字や抽出するフィールド、文字位置などを指定することで、様々な形式のテキストデータを柔軟に処理できます。パイプと組み合わせることで、他のコマンドの出力を加工したり、複雑な処理を実現したりすることも可能です。cutコマンドをマスターすることで、Linux/Unix環境でのテキスト処理がより効率的になるでしょう。