Linuxコマンド - cut

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要

cutコマンドとは、ファイルを読み込み、それぞれの行から指定した部分だけを切り出すコマンドである。
ファイルを指定しない場合は、標準入力から受け取った内容を処理する。

例えば、"3文字目から10文字目"を取り出したり、タブ等で区切られたファイルから1番目のフィールドと3番目のフィールドと取り出すことができる。

cut -d <区切り文字> -f <フィールド番号> <ファイル名>



cutコマンドのオプション

cutコマンドのオプションは、下表の通りである。

その他のオプション
オプション名 意味
-d <区切り文字>
--delimiter=<区切り文字>
フィールドの区切り文字として、
タブの代わりに使用する区切り文字を指定する。(1文字のみ)
--output-delimiter=文字列 出力の区切り文字として使用する文字列を指定する。
(1文字以上が使用可能。デフォルトでは入力の区切り文字を使用)
-s
--only-delimited
区切り文字を含まない行を出力しない。
--complement 出力指定した箇所以外を出力する。


出力指定オプション(いずれか1つを必ず指定)
オプション 意味
-b <出力リスト>
--bytes=<出力リスト>
切り出す位置のリストをバイト数で指定する。
-c <出力リスト>
--characters=<出力リスト>
切り出す位置のリストを文字数で指定する。
-f <出力リスト>
--fields=<出力リスト>
切り出す位置のリストをタブ区切りのフィールドで指定する。
区切り文字は、-dオプションで変更可能)


出力リストの指定方法
指定方法 意味
N N番目のバイト、文字、フィールド(先頭のフィールド番号を1とする)
N-M N番目からM番目まで
N- N番目から行末まで
-M 先頭からM番目まで



文字数を指定して切り出す

cutコマンドは、ファイルまたは標準入力から受け取った内容に対して、各行から指定した部分だけを出力する。
N文字目からM文字目、先頭からN文字目、N文字目以降等の指定ができる。

以下の例では、ファイルから各行の先頭10文字のみ出力する場合、以下のようなコマンドとなる。

# バイト単位での指定
cut -b 1-10 <ファイル名>

# 文字数での指定
cut -c 1-10 <ファイル名>


※注意点
Shift JISやEUC-JPでは、"あいうえお"の5文字は10バイトであるが、
UTF-8では、日本語部分は1文字が3バイトであるので、"あいうえお"は15バイトとなる。

また、区切り文字をカンマ等にすることで、複数指定することができる。

以下の例では、"1byte目〜10byte目、47byte目以降"を出力している。

cut -b 1-10,47-


以下の例では、"1文字目〜10文字目、47文字目以降"を出力している。

cut -c 1-10,47-


以下の例では、ls -lコマンドの結果から、ファイルの種類とパーミッションを示す先頭の10byte、ファイル名を示す47byte目以降を出力している。

ls -l * | cut -b 1-10,47-



フィールドを指定して切り出す

固定長ではなく、カンマやタブで区切られているファイルに対して、
N番目のフィールドを指定する場合は、-fオプションを使用する。

デフォルトの区切り文字は、タブである。
区切り文字を変更する場合は、-dオプションまたは--delim=オプションで指定する。

以下の例では、/etc/passwdファイルの1番目のフィールドと7番目のフィールドを出力している。
/etc/passwdファイルはセミコロンでフィールドが区切られており、1番目はユーザ名、7番目はログインシェル名となっている。

cut -d ":" -f 1,7 /etc/passwd



出力の区切り文字を変更する

出力の区切り文字は、--output-delimiter=オプションで変更できる。
また、出力側の区切り文字の文字数は自由である。

cut -d ":" -f 1,7 --output-delimiter=" --- " /etc/passwd



cutコマンドを使用したフィルタリング

特定のフィールドを切り出す

テキストファイル等からNフィールド目を切り出す処理やN〜Mフィールド目を切り出す処理等は、cutコマンドを使用する。

以下の3つの例では、cutコマンドの-dオプションを付加して、特定のフィールドを切り出している。

Nフィールド目を切り出す。

cut -d'デリミタ' -f<N>


Nフィールド目とMフィールド目を切り出す。

cut -d'デリミタ' -f<N>,<M>


N〜Mフィールド目を切り出す。

cut -d'デリミタ' -f<N>-<M>


フィールド間の区切り文字となるデリミタと、切り出すフィールド番号を指定することにより、
指定したデリミタによって区切られた特定のフィールドを切り出すことができる。

デリミタを指定しない場合は、標準でタブが区切り文字として使用される。
また、デリミタに,(カンマ)を指定して、CSVファイルから特定のフィールドを切り出す処理を簡単に行うことができる。

スペース区切りの2フィールド目を切り出す。

cut -d' ' -f2
echo 'field1 field2 field3 field4 field5' | cut -d' ' -f2

field2


カンマ区切りの1フィールド目と3フィールド目を切り出す。

cut -d',' -f1,3
echo "field1,field2,field3,field4,field5" | cut -d"," -f1,3

field1,field3


カンマ区切りの2フィールド目から4フィールド目を切り出す。

cut -d',' -f2-4
echo "field1,field2,field3,field4,field5" | cut -d"," -f2-4

field2,field3,field4


カンマ区切りの3フィールド目以降を切り出す。

cut -d',' -f3-
echo "field1,field2,field3,field4,field5" | cut -d"," -f3-

field3,field4,field5


タブ区切りの2フィールド目から5フィールド目を切り出す。
cutコマンドは、標準でタブがデリミタとして使用されるため、タブを区切り文字に使用する場合は-dオプションを省略する。

cut -f2-5
echo -e "field1\tfield2\tfield3\tfield4\tfield5" | cut -f2-5

field2  field3  field4  field5


特定の位置の文字を切り出す

テキストファイル等からN文字目の文字を切り出す処理やN〜M文字目の文字を切り出す処理等は、cutコマンドを使用する。

以下の3つの例では、cutコマンドの-cオプションを付加して、特定の位置の文字を切り出す。
cutコマンドに切り出す文字の位置を指定することで、文字列の中から特定の位置の文字のみを切り出すことができる。

N文字目の文字を切り出す。

cut -c<N>


N文字目とM文字目の文字を切り出す。

cut -c<N>,<M>


N〜M文字目の文字を切り出す。

cut -c<N>-<M>


3文字目を切り出す。

cut -c3
echo "1234567" | cut -c3

3


1文字目と3文字目を切り出す。

cut -c1,3
echo "1234567" | cut -c1,3

13


2〜4文字目を切り出す。

cut -c2-4
echo "1234567" | cut -c2-4

234


3文字目以降を切り出す。

cut -c3-
echo "1234567" | cut -c3-

34567