
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環境でのテキスト処理がより効率的になるでしょう。

