Linux cutコマンド完全ガイド - ログ・CSVテキストデータから必要な列だけをスマートに抽出!

概要

Linux環境において、大容量のログファイルやCSVデータから必要な列だけを迅速に抽出したい場合、cutコマンドは最も軽量で強力なツールです。区切り文字に基づくフィールド分割から固定幅バイト単位のスライスまで、実務ですぐに活用できる主要なテクニックを解説します。

区切り文字(-d)とフィールド(-f)を利用したCSVおよびシステムアカウントデータの抽出

cutコマンドの実習用ディレクトリを作成し、その場所へ移動するために mkdir -p ~/cut_demo && cd ~/cut_demo コマンドを実行します。

mkdir -p ~/cut_demo && cd ~/cut_demo

カンマ(,)区切りのテスト用ユーザーデータファイルを作成するため、echo コマンドで users.csv ファイルを生成します。

echo -e ‘id,name,role,department\n1,alice,admin,security\n2,bob,dev,backend\n3,charlie,dev,frontend’ > users.csv

cut コマンドは、テキストファイルや出力結果から特定の区切り文字を基準に、必要な列(フィールド)やバイト、文字単位の区間のみを抽出するツールです。
-d オプションでカンマ(,)を区切り文字に指定し、-f オプションで2番目と4番目のフィールドを選択することで、users.csv ファイルから名前と部署の情報だけをすっきりと出力します。
⚙️ [主要オプション]

-d : フィールドを分割する際に使用する区切り文字(デフォルトはタブ文字)を明示的に指定します。
-f : 抽出するフィールド(列)の番号や範囲を指定します。
-c : バイトの代わりに文字単位の位置を基準にしてデータを切り出します。
-b : バイト単位の位置を基準にしてデータを切り出します。
--complement : 指定したフィールドや文字範囲を除いた残りの部分を反転して出力します。
-s : 区切り文字を含まない行を出力結果から除外します。
--output-delimiter : 結果を出力する際に使用するフィールド区切り文字を指定した文字列に変更して表示します。

cut -d’,’ -f2,4 users.csv

Linuxのシステムアカウント情報が格納されている /etc/passwd ファイルから、コロン(:)区切り文字を基準にアカウント名(1番目のフィールド)とデフォルトシェルパス(7番目のフィールド)のみを抽出し、head コマンドで上位5行だけを確認します。
このように cut コマンドとパイプ(|)を組み合わせることで、膨大なシステム設定ファイルから必要な主要列データのみを手軽にモニタリングできます。

cut -d’:’ -f1,7 /etc/passwd | head -n 5

バイト(-b)および文字(-c)単位のスライスによる固定幅ログの処理

実習を継続するため、先ほど作成した作業ディレクトリへ移動するべく cd ~/cut_demo コマンドを実行します。

cd ~/cut_demo

固定幅の文字単位スライスを実習するため、日付、時間、ログレベルが一定のフォーマットで記録された service.log サンプルログファイルを作成します。

echo -e ‘2026-10-07 14:00:01 [INFO] Service started\n2026-10-07 14:00:05 [WARN] High memory usage\n2026-10-07 14:00:12 [ERROR] Connection timed out’ > service.log

cut コマンドに -c1-10 オプションを指定し、各行の1文字目から10文字目までを切り出すことで、年-月-日の日付情報のみをスマートに抽出します。

cut -c1-10 service.log

-c12-19 オプションを使用して、ログファイルの12文字目から19文字目の領域に位置する時:分:秒のタイムスタンプ情報のみを正確に分離して出力します。

cut -c12-19 service.log

-c22- のように終了位置を省略すると、22文字目から各行の末尾までの残りのテキストを一度にスライスし、メッセージ領域を抽出することができます。

cut -c22- service.log

出力区切り文字(–output-delimiter)の変更および指定フィールドの除外(–complement)

先ほど作成した実習用ファイルがあるディレクトリへ移動するため、cd ~/cut_demo コマンドを実行します。

cd ~/cut_demo

--output-delimiter オプションを使用すると、抽出したフィールド間のデフォルト区切り文字の代わりに任意の文字列を指定して出力できます。
カンマ(,)で区切られた users.csv ファイルから2番目と3番目のフィールドを抽出し、フィールド間に空白とパイプ(|)記号を挟んで視認性を高めて表示します。

cut -d’,’ -f2,3 –output-delimiter=’ | ’ users.csv

--complement オプションを指定すると、選択したフィールドを除外して残りのすべての列を反転して出力します。
-f3 オプションと一緒に使用することで、3番目のフィールド(役割情報)だけを除外し、残りのフィールドのみを過不足なく残して出力します。

cut -d’,’ –complement -f3 users.csv

実務パイプライン連携: cut, sort, uniqを組み合わせた接続IP統計分析

実習を継続するため、先ほど作成した専用ディレクトリへ移動するべく cd ~/cut_demo コマンドを実行します。

cd ~/cut_demo

Webサーバーのクライアントリクエストログを模擬分析するため、空白で区切られた接続IPおよびHTTPリクエスト情報を含む access.log サンプルログファイルを作成します。

echo -e ‘192.168.1.10 - - [07/Oct/2026] “GET /index.html” 200\n192.168.1.15 - - [07/Oct/2026] “POST /login” 401\n192.168.1.10 - - [07/Oct/2026] “GET /dashboard” 200\n10.0.0.5 - - [07/Oct/2026] “GET /api/v1” 200\n192.168.1.10 - - [07/Oct/2026] “POST /logout” 200’ > access.log

cut コマンドの -d' ' -f1 オプションにより、空白基準で1番目の列であるクライアントIPアドレスのみを切り出します。
続いて sort でソートした後に uniq -c で重複回数をカウントし、さらに sort -nr を繋げることで、アクセス頻度が最も高いIP順に降順ソートされた統計ランキングを導き出します。

cut -d’ ’ -f1 access.log | sort | uniq -c | sort -nr

ここまで、cut コマンドを活用してログやCSVデータから必要な列だけをすっきりと抽出する方法を確認しました。
区切り文字とフィールドオプションを適切に使い分け、日常のテキスト処理やデータ加工作業をより一層効率的に進めてみてください。