Linuxコマンド一覧

cutコマンド|行から必要な列だけを取り出す

__ __ _ _____
\ \ / /__| |_|_ _|__ _ __ _ __ ___
\ \ /\ / / _ \ '_ \| |/ _ \ '__| '_ ` _ \
\ V V / __/ |_) | | __/ | | | | | |
\_/\_/ \___|_.__/|_|\___|_| |_| |_| |_
 
cut を試すためのサンドボックスです。実機のファイルには影響しません。
user@webterm:~/project$
 

cut は各行から指定した列や文字だけを取り出すコマンドです。区切り文字を指定する `-d` と `-f`、文字位置で切る `-c` の使い分けを、ブラウザ上のターミナルで打ちながら確認できます。

最終更新: 2026-09-06

書式

cut -d 区切り文字 -f 列番号 ファイル
cut -c 文字位置 ファイル

各行から、指定した部分だけを取り出します。

まず打ってみる

CSV から名前の列だけを取り出します。

$ cat users.csv
id,name,team,email
1,ada,web,ada@example.com
2,linus,infra,linus@example.com
3,grace,infra,grace@example.com
$ cut -d, -f2 users.csv
name
ada
linus
grace

-d が区切り文字、-f が何番目かです。 複数の列はカンマで並べます。

$ cut -d, -f1,3 users.csv
id,team
1,web
2,infra
3,infra

2- のように書くと、そこから最後までです。

$ cut -d, -f2- users.csv
name,team,email
ada,web,ada@example.com
linus,infra,linus@example.com
grace,infra,grace@example.com

文字の位置で切る

桁のそろったデータには -c を使います。 ログの先頭10文字が日付なら、こう取り出せます。

$ cat logs/access.log
2026-09-06 10:12:33 200 /index
2026-09-06 10:12:41 404 /missing
2026-09-06 10:13:02 200 /index
2026-09-07 09:01:15 500 /boom
2026-09-07 09:02:44 200 /index
$ cut -c1-10 logs/access.log
2026-09-06
2026-09-06
2026-09-06
2026-09-07
2026-09-07

-c は区切り文字を見ず、何文字目かだけで切ります。

数えるために使う

cut の出番は、たいてい集計の手前です。 ステータスコードの列だけを取り出して数えます。

$ cut -d' ' -f3 logs/access.log
200
404
200
500
200
$ cut -d' ' -f3 logs/access.log | sort | uniq -c
      3 200
      1 404
      1 500

区切りがタブのとき

-d を省くと、区切りはタブになります。

$ cut -f2 report.tsv
status
200
404

コロン区切りのファイルなら -d: です。 /etc/passwd からユーザー名とログインシェルを取り出すのが、実務で最もよく見る例です。

$ cut -d: -f1,7 /etc/passwd
root:/bin/bash
user:/bin/zsh
deploy:/bin/bash

実務での使いどころ

cut は、要る列だけにしてから次へ渡すときに打つコマンドです。

場面打ち方
CSV の1列だけ見るcut -d, -f2 users.csv
ログの日付だけ取り出すcut -c1-10 access.log
ステータスを数えるcut -d' ' -f3 access.log | sort | uniq -c
ユーザー名の一覧を作るcut -d: -f1 /etc/passwd
TSV の列を取り出すcut -f2 report.tsv

つまずきやすいところ

列の順番は入れ替えられません。 cut -d, -f3,1 と書いても、出るのは 1・3 の順です。 順番を変えたい、計算したい、条件で絞りたい、のいずれかが要るなら awk の仕事です。

-c-f は同時に使えません。

$ cut -c1 -f1 users.csv
cut: only one type of list may be specified

-d-f と組でしか意味を持ちません。

$ cut -c1-4 -d, users.csv
cut: an input delimiter may be specified only when operating on fields

どちらも指定しないと動きません。

$ cut users.csv
cut: you must specify a list of bytes, characters, or fields

手を動かして覚える

webterm.appこのサイト

learn.webterm.app別のサイト

>_WEBTERM LEARN

WebTerm Learn|1つのコマンドから、使える状態へ

コマンドは単体で覚えるより、実際の作業の流れの中で使うほうが身につきます。順番に積み上げていくコースがあります。

コースを見る

関連するコマンド

awk / sort / uniq / grep

よくある質問

-f と -c はどう違いますか?
`-f` は「何番目の列か」、`-c` は「何文字目か」です。カンマやコロンで区切られたデータは `-f`、桁がそろったログの日付などは `-c` を使います。
-d を省くとどうなりますか?
タブが区切りになります。TSV ならそのまま `cut -f2` で取り出せます。CSV には `-d,` が要ります。
区切り文字が見つからない行はどうなりますか?
その行は切られず、まるごと出ます。混ざると読みにくいので、`grep` で対象の行だけに絞ってから cut に渡すのが確実です。
列の順番を入れ替えられますか?
できません。`cut -f3,1` と書いても、出るのは 1・3 の順です。順番を変えたいときは `awk` を使います。
スペース区切りのログでうまく切れません。
スペースが2つ続くと空の列ができるためです。桁がそろっているなら `-c`、そうでなければ `awk` のほうが向いています。