cutコマンド
- 文字数を指定して切り出す
- フィールドを指定して切り出す
- 出力の区切り文字を変更する
cutコマンド概要
「cut」は、ファイルを読み込んで、それぞれの行から指定した部分だけを切り出すコマンドです。例えば、「3文字目から10文字目」や、タブなどで区切られたファイルから「1番目のフィールドと3番目のフィールド」のように選んで取り出すことができます。
cutコマンドの書式
cut オプション [ファイル]
cutコマンドの主なオプション
オプション | 意味 |
---|---|
-c | 切り出す位置のリストを文字数で指定する |
-f 1,3または1-3 | 切り出す位置のリストをタブ区切りのフィールドで指定する(区切り文字は「-d」オプションで変更可能) |
-d ‘文字’ | フィールドの区切り文字として、タブの代わりに使用する文字を指定する(1文字のみ) |
cutコマンド詳細説明
文字数を指定して切り出す
cutコマンドで頭から4文字を切り出す
$ STR="Hello World"
$ echo $string | cut -c 1-4
Hell
bashの文字列変数で頭から4文字を切す
$ STR="Hello World"
$ echo ${STR:0:4}
Hell
sedコマンドで先頭から4文字切り出す
$ STR="Hello World"
$ echo "${STR}" | sed 's/^\(.\{4\}\).*$/\1/'
Hell
フィールドを指定して切り出す
フィールドの区切り文字は、デフォルトで ,(カンマ)とTAB(タブ)です。
特に指定しなければ、cutコマンドが考えて区切り文字として認識してくれます。
ただカンマとTABが混在している場合は不安ですね。
次の項で、区切り文字(デリミタ)を指定する方法を説明します。
区切り文字のデフォルトがカンマとタブだから
/etc/passwdのようにデリミタを指定しないときちんと区切られない。
$ sudo cat /etc/passwd | cut -f 1,7 | tail
_findmydevice:*:254:254:Find My Device Daemon:/var/db/findmydevice:/usr/bin/false
_datadetectors:*:257:257:DataDetectors:/var/db/datadetectors:/usr/bin/false
_captiveagent:*:258:258:captiveagent:/var/empty:/usr/bin/false
_ctkd:*:259:259:ctkd Account:/var/empty:/usr/bin/false
_applepay:*:260:260:applepay Account:/var/db/applepay:/usr/bin/false
_hidd:*:261:261:HID Service User:/var/db/hidd:/usr/bin/false
_cmiodalassistants:*:262:262:CoreMedia IO Assistants User:/var/db/cmiodalassistants:/usr/bin/false
_analyticsd:*:263:263:Analytics Daemon:/var/db/analyticsd:/usr/bin/false
_fpsd:*:265:265:FPS Daemon:/var/db/fpsd:/usr/bin/false
_timed:*:266:266:Time Sync Daemon:/var/db/timed:/usr/bin/false
デリミタを指定した場合はきちんと1番目、7番目のフィールドが切り取られました
まずはcutコマンドで実現します。
$ sudo cat /etc/passwd | cut -f 1,7 -d ':' | tail
_findmydevice:/usr/bin/false
_datadetectors:/usr/bin/false
_captiveagent:/usr/bin/false
_ctkd:/usr/bin/false
_applepay:/usr/bin/false
_hidd:/usr/bin/false
_cmiodalassistants:/usr/bin/false
_analyticsd:/usr/bin/false
_fpsd:/usr/bin/false
_timed:/usr/bin/false
$
同じことをawkコマンドでやってみます。デリミタの区切り指定は -F です。
$ sudo cat /etc/passwd | awk -F ':' '{ print $1":"$7;}' | tail
_findmydevice:/usr/bin/false
_datadetectors:/usr/bin/false
_captiveagent:/usr/bin/false
_ctkd:/usr/bin/false
_applepay:/usr/bin/false
_hidd:/usr/bin/false
_cmiodalassistants:/usr/bin/false
_analyticsd:/usr/bin/false
_fpsd:/usr/bin/false
_timed:/usr/bin/false
$
- ヒント
- 文字を切り出す方法にもいくつかありますし、フィールドの切り出しにもいろいろな方法があります。用途に合わせて使い分けてください。最初のうちは、一つの方法を覚えておけばよいです。