新Linux入門|cutコマンドを使ってデータを部分抽出する方法

 Linuxでテキストファイルを扱っているとき、「特定の列だけ見たい!」と思うことがありますよね。
たとえばCSVファイルから「名前とメールアドレス」だけを抜き出したい場合や、
 システムファイルから「ユーザー名」だけを一覧にしたいときなどに便利なのが cutコマンド です。

cutコマンドを使うと、テキストファイルやコマンドの出力結果から
必要な部分(列・文字・バイト)だけを抽出 できます。
シェルスクリプトやデータ整理の場面で頻繁に登場する、基礎的かつ強力なコマンドです。

📘 cutコマンドの概要

cut は、テキストデータを「区切り文字」や「位置」で分割し、
指定した部分だけを切り出して表示するコマンドです。

たとえば、カンマ区切りのファイルから特定の列を取り出したり、
システムのユーザー情報を抽出するのに使えます。

📘 コマンド書式

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

📗

[suzuki@AlmaLinux ~]$ cut -d',' -f2,3 sample.csv

この例では、sample.csv の「2列目と3列目」をカンマ区切りで抽出します。

⚙️ 主なオプションと説明

オプション説明
-f抽出したいフィールド(列)を指定。番号は1から始まる。
-d区切り文字を指定。デフォルトはタブ文字。
-c指定した文字位置を抽出。例:-c 1-5 は1~5文字目を切り出す。
-bバイト単位で指定範囲を抽出。マルチバイト文字に注意。

💡 ポイント

  • 区切り文字が「:(コロン)」や「,(カンマ)」などの場合は、必ず -d で指定します。
  • -f と -d の組み合わせが、CSVやシステムファイルでよく使われます。
  • 日本語などマルチバイト文字の場合は、-b ではなく -c を使う方が安全です。

🧪 使用例と出力解説

① 基本的な使用例(CSVファイルから特定列を抽出)

[suzuki@AlmaLinux ~]$ cat data.csv
ID,Name,Email
1,Suzuki,suzuki@example.com
2,Tanaka,tanaka@example.com
3,Yamamoto,yamamoto@example.com

[suzuki@AlmaLinux ~]$ cut -d',' -f2,3 data.csv
Name,Email
Suzuki,suzuki@example.com
Tanaka,tanaka@example.com
Yamamoto,yamamoto@example.com

💬 区切り文字を「 , 」に指定し、2列目と3列目だけを抽出しています。

② バイト単位で抽出する(-b)

[suzuki@AlmaLinux ~]$ echo "ABCDEFGHIJ" | cut -b 1-5
ABCDE

💬 この例では、最初の5バイト(A〜E)だけを抽出しています。
英数字のような1バイト文字なら問題ありませんが、日本語文字列には不向きです。

③ 文字単位で抽出する(-c)

[suzuki@AlmaLinux ~]$ echo "りんごバナナ" | cut -c 1-3
りんご

💬 -c は「文字単位」で抽出するため、マルチバイト文字(日本語)でも崩れません。

④ /etc/passwd からユーザー名を一覧表示

 /etc/passwd ファイルは、システム上のユーザー情報を次のようにコロン( : )で区切って保存しています。

ユーザー名:パスワード:UID:GID:コメント:ホームディレクトリ:ログインシェル

たとえば内容の一部は次のようになっています。

[suzuki@AlmaLinux ~]$ head -5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
suzuki:x:1000:1000::/home/suzuki:/bin/bash
watanabe:x:1001:1001::/home/watanabe:/bin/bash

ここからユーザー名だけを抽出するには

[suzuki@AlmaLinux ~]$ cut -d: -f1 /etc/passwd
root
bin
daemon
suzuki
watanabe

💬 区切り文字「 : 」を指定し、1列目(ユーザー名)だけを表示しています。
シンプルで非常に実用的な使い方です。

⑤ /etc/group からグループ名を抽出

/etc/group も同じようにコロンで区切られています。

[suzuki@AlmaLinux ~]$ head -3 /etc/group
root:x:0:
bin:x:1:root,bin
wheel:x:10:root,suzuki

[suzuki@AlmaLinux ~]$ cut -d: -f1 /etc/group
root
bin
wheel

💬 このようにして、グループ名(1列目)だけを簡単に取り出せます。

✅ まとめ

  • cutコマンド は、テキストファイルの特定部分を切り出すためのコマンド。
  • -d で区切り文字を指定し、-f で抽出したい列を指定できる。
  • -c や -b を使えば、文字単位・バイト単位での切り出しも可能。
  • /etc/passwd や /etc/group のようなシステムファイルにも応用できる。

💬 データ処理やスクリプト作成で頻繁に使う基本コマンドです。
ぜひ cut -d: -f1 /etc/passwd を実行して、ユーザー名一覧を抽出してみましょう!