Linuxで日々の作業をしていると、ログファイルやCSVなどのデータを「特定の列だけ取り出したい」という場面によく出くわします。そんな時に活躍するのが「cutコマンド」です。cutはテキストファイルの中から特定の文字列やフィールドを切り出して表示するための非常に便利なツールです。
本記事では、cutコマンドの基本的な使い方から実践的な活用例までを、初心者にもわかりやすく解説します。作業効率をぐっと高めるテクニックも紹介しますので、ぜひ最後まで読んでみてください。
cutコマンドとは?
cutコマンドは、テキストファイルや標準入力から指定した「文字数」または「区切り文字で分けられたフィールド」を抜き出すためのコマンドです。
多くのLinuxディストリビューションで標準搭載されており、手軽に使えるのが魅力です。ログ解析やデータ処理、CSVファイルの前処理など、用途は多岐にわたります。
基本構文は以下の通りです:
cut [オプション] [ファイル名]
また、パイプ(|
)と組み合わせて、標準入力を受け取って処理することも可能です。
文字数で抽出する(-cオプション)
cutコマンドの最も基本的な使い方の一つが、文字の位置を指定して取り出す方法です。-c
オプションを使います。
例:1文字目から5文字目までを表示
cut -c1-5 sample.txt
このコマンドは、sample.txt
の各行の1文字目から5文字目までを表示します。複数の範囲もカンマで指定できます。
例:1文字目と7文字目を表示
cut -c1,7 sample.txt
このように、文字数でデータの一部分を取得したいときに便利です。注意点としては、全角文字は2バイト扱いされることがあり、期待通りに動作しないこともあるので注意が必要です。
区切り文字でフィールドを抽出する(-dと-f)
CSVファイルやログファイルなど、特定の区切り文字で分かれているデータから特定の列(フィールド)を取り出すには、-d
と-f
オプションを組み合わせて使います。
例:CSVファイルの1列目を抽出
cut -d',' -f1 data.csv
-d','
は区切り文字としてカンマを指定、-f1
は1番目のフィールド(列)を抽出するという意味です。
例:2列目と4列目を抽出
cut -d',' -f2,4 data.csv
複数の列を同時に取得できるのが便利です。
区切り文字を変更したい場合
cutコマンドでは、区切り文字を好きな文字に指定できます。CSVならカンマ、ログならスペースやタブなど、さまざまな区切り方に対応できます。
例:スペース区切りのデータから3列目を抽出
cut -d' ' -f3 log.txt
ただし、スペースが連続している場合、意図しないフィールドが抽出される可能性があるため注意が必要です。このようなケースではawk
やtr
コマンドとの併用が有効な場合もあります。
パイプとの組み合わせで効率的に使う
cutコマンドは、他のコマンドと組み合わせて使うことで威力を発揮します。特にパイプ(|
)を使うことで、フィルター処理のような役割を担うことができます。
例:psコマンドの出力からプロセス名だけ取り出す
ps aux | cut -c66-
このように、プロセス情報の中から指定した文字位置以降だけを表示させることができます。
よく使う組み合わせ例
1. ファイルの拡張子だけを取り出す
ls | cut -d'.' -f2
拡張子付きのファイル名から、拡張子だけを取り出せます。
2. ログファイルからIPアドレスだけを抽出
cat access.log | cut -d' ' -f1
Apacheなどのアクセスログでは、最初のフィールドがIPアドレスであることが多いです。
cutと他コマンドの使い分け
cutはシンプルな文字列の抽出には非常に便利ですが、以下のようなケースではawkやsedの方が向いている場合があります:
- 区切り文字が複数混在している
- 条件によって抽出内容を変えたい
- 正規表現による高度な抽出を行いたい
cutは「手軽さ・速さ」が魅力なので、使いどころを見極めることが大切です。
まとめ
cutコマンドは、Linuxで日常的に使うデータ処理やファイル操作において非常に役立つツールです。特にログやCSVファイルの処理においては、文字単位やフィールド単位で簡単に切り出すことができるため、作業の効率化に大きく貢献します。
- 文字数で切り出すには
-c
- 区切り文字を使った列の抽出には
-d
と-f
- 他のコマンドと組み合わせることで威力倍増
簡単なコマンドながら奥が深いcutコマンド。ぜひこの記事を参考に、日々の作業で使いこなしてみてください。