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