CSVや区切り文字付きのテキストから特定のフィールドを抽出したい場面は、サーバー管理で毎日のように発生します。
そこで使うのが cut コマンドです。
この記事では、cutコマンドの基本的な使い方から、-f・-dオプションの実践的な組み合わせ、ログ解析・CSVの列抽出まで幅広く解説します。
RHEL 9.4 / Ubuntu 24.04 LTS で動作確認済みです。
この記事のポイント
・ cut -d':' -f1 /etc/passwd でユーザー名一覧を即座に抽出できる
・ -f に範囲指定(-f1-3)や複数列(-f1,3,5)が使える
・ -c オプションで文字位置による切り出しも可能
・ パイプでawk・sort・uniqと組み合わせると列単位の集計が手軽になる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
cutコマンドとは?どんな場面で使うのか
cutコマンドは、テキストファイルや標準入力から指定した列(フィールド)または文字位置を切り出すコマンドです。awk や sed のように複雑な構文を覚えなくても、単純な列抽出ならcutで十分です。
典型的な利用シーンは次のとおりです。
・/etc/passwd からユーザー名だけ抽出:コロン区切りの1列目
・アクセスログから特定フィールド抽出:スペース区切りのIPアドレス列
・CSV形式のログから列を切り出す:カンマ区切りの任意の列
・固定長フォーマットから文字数単位で切り出す:-cオプション利用
cutコマンドは Linux DNS 設定の基本 などと同様に、Linux標準のテキスト処理ツールチェーンの一部です。パイプで他のコマンドと組み合わせることで真価を発揮します。
基本的な使い方
1. -d と -f で区切り文字・フィールド番号を指定する
cutコマンドの最もよく使う形が、-d(delimiter: 区切り文字)と -f(field: 列番号)の組み合わせです。# 書式 cut -d '区切り文字' -f 列番号 ファイル名 # /etc/passwd からユーザー名(1列目)を取得 cut -d ':' -f 1 /etc/passwd
root bin daemon adm lp sync shutdown halt mail operator ...(省略) tomohiro
-d ' ' とシングルクォートで囲みます。-f は1始まりの列番号を指定します。デフォルトの区切り文字はタブです。
2. 複数列・列範囲を指定する
-f には複数の指定方法があります。# 1列目と3列目だけ(カンマ区切りで複数指定) cut -d ':' -f 1,3 /etc/passwd # 1列目から3列目(ハイフンで範囲指定) cut -d ':' -f 1-3 /etc/passwd # 3列目以降すべて cut -d ':' -f 3- /etc/passwd # 先頭から2列目まで cut -d ':' -f -2 /etc/passwd
# cut -d ':' -f 1,3 /etc/passwd の出力例(実サーバー、一部抜粋) root:0 bin:1 daemon:2 adm:3 tomohiro:1000 nginx:995
3. -c で文字位置を指定する(固定長フォーマット)
ログファイルが固定長フォーマット(日付が1~10文字目など)の場合は -c オプションを使います。# 1文字目から10文字目を抽出(日付部分) cut -c 1-10 /var/log/some_fixed_log.txt # 1文字目と5文字目だけ抽出 cut -c 1,5 /var/log/some_fixed_log.txt # 11文字目以降をすべて抽出 cut -c 11- /var/log/some_fixed_log.txt
応用・実務Tips
4. パイプを使った列抽出+集計
cutの真骨頂はパイプとの組み合わせです。たとえばNginxのアクセスログからIPアドレス(1列目)を抽出してアクセス数の多い順に並べる場合は次のようにします。
# スペース区切りでIPアドレス列を抽出→ソート→集計 cut -d ' ' -f 1 /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
4821 203.0.113.xx 1302 198.51.100.xx 987 192.0.2.xx 654 203.0.113.yy ...
5. CSVファイルの特定列を抽出する
CSVファイル(カンマ区切り)から必要な列だけを取り出すには -d ',' を使います。# data.csv の1列目(ID)と3列目(金額)を抽出 cut -d ',' -f 1,3 data.csv # ヘッダー行を含む場合(tail -n +2 でヘッダーをスキップ) tail -n +2 data.csv | cut -d ',' -f 1,3
6. タブ区切りファイルの処理(デフォルト動作)
cutのデフォルト区切り文字はタブです。-d を省略した場合はタブ区切りとして動作します。# タブ区切りファイルの2列目を抽出(-d省略でタブ区切り) cut -f 2 tab_delimited_file.tsv # またはタブを明示的に指定 cut -d $'\t' -f 2 tab_delimited_file.tsv
7. awkとの使い分け
cutとawkは似た用途ですが、使い分けの基準があります。・cut が向いている場合:区切り文字が1文字・フィールド番号指定のみ・高速処理が必要
・awk が向いている場合:連続する区切り文字(スペース複数)・条件付き抽出・演算・変数処理
ps コマンドなどの出力はスペースが複数連続していることが多く、その場合は cut では正しく列番号が対応しません。Linux 基本コマンドの解説 で紹介しているawkの方が適しています。
トラブルシュート・エラー対処
「cut: option requires an argument」エラー
-f や -d の後に引数(列番号・区切り文字)を指定していないと発生します。# NG例(-f の後に引数なし) cut -f /etc/passwd # OK例 cut -d ':' -f 1 /etc/passwd
「cut: the delimiter must be a single character」エラー
-d に2文字以上を指定すると発生します。cutは1文字の区切り文字しか扱えません。# NG例(2文字の区切り文字は不可) cut -d '::' -f 1 file.txt # 2文字以上の区切り文字にはawkを使う awk -F '::' '{print $1}' file.txt
列が期待通りに抽出されない(スペース区切り)
ps や ls -l などの出力では、スペースが複数連続することがあります。cutはスペース1個を区切り文字として扱うため、連続スペースを「空のフィールド」として数えます。# psの出力例(スペースが複数連続) # PID TTY TIME CMD # 1234 pts/0 00:00:00 bash # cut で列がずれる場合はawkを使う ps | awk '{print $1}' # またはtrで連続スペースを1つに正規化してからcutを使う ps | tr -s ' ' | cut -d ' ' -f 2
本記事のまとめ
cutコマンドのオプションと用途をまとめます。| やりたいこと | コマンド |
|---|---|
| コロン区切りの1列目を抽出 | cut -d ':' -f 1 ファイル名 |
| 複数列を抽出(1列目と3列目) | cut -d ':' -f 1,3 ファイル名 |
| 1列目から3列目の範囲を抽出 | cut -d ':' -f 1-3 ファイル名 |
| 文字位置で切り出す(1~10文字目) | cut -c 1-10 ファイル名 |
| カンマ区切りCSVの2列目を抽出 | cut -d ',' -f 2 ファイル名 |
| パイプでIPアドレス集計 | cut -d ' ' -f 1 access.log | sort | uniq -c | sort -rn |
まずは
cut -d ':' -f 1 /etc/passwd から試してみてください。「これだけで列が取り出せるのか」と実感できるはずです。
cutコマンドを使いこなせたら、次はサーバー構築の基礎を固めませんか?
テキスト処理コマンドを組み合わせてログを読む力がつけば、サーバー管理の効率は大きく変わります。その力を活かして、体系的にLinuxサーバー構築を学んでみませんか。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:mkfsコマンドでLinuxのファイルシステムを作成する方法|ext4・xfs・tmpfsの使い分けとfstab設定も
- 前のページへ:patchコマンドでファイルを差分適用する方法|--dry-runで安全確認とロールバックも
- この記事の属するカテゴリ:Linuxtips・テキスト処理コマンドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます