【初心者向け】Linuxのcutコマンド徹底解説!列の抽出が驚くほど簡単にできる方法

Linux

Linuxユーザーなら一度は頼るのがcutコマンドです。

CSVやログファイル、コマンドの出力から、特定の列や文字だけを切り出して表示したいときに役立つこのツール。

一見シンプルですが、使いこなせば強力なデータ抽出コマンドになります。

この記事では、初心者の方でも理解できるように、cutコマンドの基本的な使い方から応用テクニックまでを具体例つきで解説します。

スポンサーリンク

cutコマンドとは?基本の役割と仕組み

cutは「文字列や列の一部を切り出す」ためのコマンド

cut(カット)は、ファイルや標準入力の中から、特定の文字やフィールド(列)だけを抜き出して表示するコマンドです。

基本構文

cut [オプション] ファイル名

主な使用目的

cutコマンドが活躍する場面は、たとえば以下のようなケースです:

  • CSVファイルから特定の列を抽出したい
  • ログの中からIPアドレスだけ取り出したい
  • スクリプト内で必要な情報だけ処理したい
  • コマンドの出力から一部分だけを使いたい

なぜcutコマンドが便利なのか?

  • 軽量で高速 シンプルな処理なので、大きなファイルでも素早く動作します
  • 他のコマンドと組み合わせやすい パイプを使って、他のLinuxコマンドとつなげられます
  • 覚えやすい オプションが少なくて、基本を覚えるのが簡単です
  • ポイント: cutコマンドは「情報を部分的に切り出す」ための便利なツールです。

cutコマンドの基本的な使い方とオプション解説

その1:文字単位での切り出し(-c)

echo "abcdefg" | cut -c 2-4

実行結果: bcd

説明: 2文字目から4文字目までを切り出します。

文字位置の指定方法

# 3文字目だけ
echo "Hello" | cut -c 3        # 結果: l

# 1文字目から3文字目まで
echo "Hello" | cut -c 1-3      # 結果: Hel

# 3文字目以降すべて
echo "Hello" | cut -c 3-       # 結果: llo

# 3文字目まで
echo "Hello" | cut -c -3       # 結果: Hel

その2:区切り文字で分割して列を抽出(-d と -f)

echo "山田,30,エンジニア" | cut -d "," -f 1

実行結果: 山田

説明: カンマ(,)で分割し、1列目だけ表示します。

列の指定方法

# 1列目だけ
echo "A,B,C,D" | cut -d "," -f 1        # 結果: A

# 2列目と4列目
echo "A,B,C,D" | cut -d "," -f 2,4      # 結果: B,D

# 2列目から4列目まで
echo "A,B,C,D" | cut -d "," -f 2-4      # 結果: B,C,D

# 3列目以降すべて
echo "A,B,C,D" | cut -d "," -f 3-       # 結果: C,D

よく使うオプション一覧

オプション説明使用例
-c文字の位置を指定して抽出cut -c 2-5
-d区切り文字の指定(デフォルトはタブ)cut -d ","
-f抽出するフィールド(列)を指定cut -f 1,3
--complement指定した部分以外を表示cut -d "," -f 2 --complement

覚えておこう: -cは文字単位、-d+-fは列単位で使うのが基本です。

cutコマンドの実用例で理解を深めよう

例その1:CSVファイルから特定の列だけを抜き出す

# users.csvの内容例
# 名前,年齢,職業
# 田中,25,プログラマー
# 佐藤,30,デザイナー

cut -d "," -f 2 users.csv

実行結果:

年齢
25
30

例その2:ログファイルからIPアドレスだけ抽出

# access.logの内容例
# 192.168.1.1 - - [25/Dec/2024:10:00:00] "GET /"

cat access.log | cut -d " " -f 1

実行結果:

192.168.1.1
192.168.1.2
192.168.1.3

例その3:複数列を同時に取り出す

cut -d "," -f 1,3 data.csv

説明: 名前(1列目)と職業(3列目)だけを表示します。

例その4:psコマンドの出力からプロセス名だけ抽出

ps aux | cut -c 65-

説明: ps auxの出力の65文字目以降(プロセス名部分)を表示します。

例その5:日付文字列から年月だけ抽出

echo "2024-12-25" | cut -d "-" -f 1,2

実行結果: 2024-12

テクニック: cutはログ解析やCSV処理など、実務でもよく使われるシーンが多いコマンドです。

cutコマンドの応用テクニックと組み合わせ

columnと組み合わせて見やすく表示

cut -d "," -f 1,2 data.csv | column -s "," -t

何をするか: 切り出したデータを表形式に整形して見やすくします。

実行例:

# 元のデータ
田中,25
佐藤,30

# columnコマンド後
田中  25
佐藤  30

sortとuniqとの連携

cut -d "," -f 2 data.csv | sort | uniq

何をするか: 2列目のデータを重複なしで並べ替えします。

処理の流れ:

  1. cut:2列目だけを抽出
  2. sort:アルファベット順に並び替え
  3. uniq:重複を削除

headやtailとの組み合わせ

# 最初の5行の1列目だけ表示
head -5 data.csv | cut -d "," -f 1

# 最後の10行の2-3列目を表示
tail -10 data.csv | cut -d "," -f 2-3

grepとの組み合わせ

# 特定の文字列を含む行から、列を抽出
grep "エンジニア" users.csv | cut -d "," -f 1

説明: 「エンジニア」という文字列を含む行を見つけて、その行の名前(1列目)だけを表示します。

ワンライナーでの活用例

# アクセスログのIPアドレス別アクセス数
cut -d " " -f 1 access.log | sort | uniq -c | sort -nr

# CSVの特定列の合計(要bc)
cut -d "," -f 3 sales.csv | tail -n +2 | paste -sd+ | bc

他のコマンドとの使い分け

cut vs awk vs sed

コマンド特徴適用場面
cut軽量・高速。単純な切り出しに最適列の抽出、文字の切り出し
awk条件処理・計算・集計など複雑な処理が可能複雑なデータ加工、計算処理
sedテキストの置換や行処理が得意文字列の置換、行の削除・挿入

使い分けの目安

cutを使う場面:

  • 単純に列や文字を切り出したい
  • 高速な処理が必要
  • シンプルなスクリプトを書きたい

awkを使う場面:

  • 条件によって処理を変えたい
  • 計算や集計が必要
  • 複雑なデータ変換が必要

よくあるエラーと対処法

エラー1:区切り文字が見つからない

# エラーの例
echo "a b c" | cut -d "," -f 1
# 結果: a b c(全体が表示される)

対処法: 正しい区切り文字を指定する

echo "a b c" | cut -d " " -f 1
# 結果: a

エラー2:文字位置の指定ミス

# 存在しない範囲を指定
echo "abc" | cut -c 5-10
# 結果: 何も表示されない

対処法: 文字列の長さを確認してから範囲を指定する

エラー3:タブとスペースの混在

# タブ区切りのファイルにスペース区切りを指定
cut -d " " -f 1 tab_separated.txt

対処法: ファイルの区切り文字を確認する

# タブ文字の確認
cat -A filename.txt

# タブ区切りの場合(デフォルト)
cut -f 1 filename.txt

実践的な活用シーン

システム管理での活用

# メモリ使用量の多いプロセス上位5個の名前だけ表示
ps aux --sort=-%mem | head -6 | tail -5 | cut -c 65-

# ディスク使用量の表示(サイズと名前のみ)
df -h | cut -c 31-34,73-

ログ解析での活用

# Webサーバーログからアクセス時間だけ抽出
cut -d '[' -f 2 access.log | cut -d ']' -f 1

# エラーログから日時とメッセージだけ抽出
cut -d ' ' -f 1,2,4- error.log

データ処理での活用

# CSVファイルのヘッダー行を表示
head -1 data.csv | cut -d "," -f 1- | tr ',' '\n' | nl

# 特定列の統計情報
cut -d "," -f 3 sales.csv | tail -n +2 | sort -n | head -1  # 最小値
cut -d "," -f 3 sales.csv | tail -n +2 | sort -n | tail -1  # 最大値

よくある質問と答え

Q: 区切り文字が複数文字の場合はどうしますか?
A: cutコマンドは1文字の区切り文字しか扱えません。複数文字の場合はawkを使用してください。

Q: 列の順番を入れ替えることはできますか?
A: はい。cut -d "," -f 3,1,2のように指定すると、3列目、1列目、2列目の順で表示されます。

Q: 大きなファイルでも高速に処理できますか?
A: はい。cutは非常に軽量なので、大きなファイルでも高速に処理できます。

まとめ:cutコマンドを使いこなして、Linuxでのデータ操作を加速しよう!

重要ポイントまとめ:

  • cutコマンドは文字や列の切り出しに特化した軽量ツール
  • -cで文字位置、-d-fで列を指定
  • 他のコマンドと組み合わせることで威力を発揮
  • ログ解析やCSV処理など実務でも頻繁に使用

コメント

タイトルとURLをコピーしました