Linuxコマンド - cut
概要
cutコマンドとは、ファイルを読み込み、それぞれの行から指定した部分だけを切り出すコマンドである。
ファイルを指定しない場合は、標準入力から受け取った内容を処理する。
例えば、"3文字目から10文字目"を取り出したり、タブ等で区切られたファイルから1番目のフィールドと3番目のフィールドと取り出すことができる。
cut -d <区切り文字> -f <フィールド番号> <ファイル名>
cutコマンドのオプション
cutコマンドのオプションは、下表の通りである。
オプション名 | 意味 |
---|---|
-d <区切り文字> --delimiter=<区切り文字> |
フィールドの区切り文字として、 タブの代わりに使用する区切り文字を指定する。(1文字のみ) |
--output-delimiter=文字列 | 出力の区切り文字として使用する文字列を指定する。 (1文字以上が使用可能。デフォルトでは入力の区切り文字を使用) |
-s --only-delimited |
区切り文字を含まない行を出力しない。 |
--complement | 出力指定した箇所以外を出力する。 |
オプション | 意味 |
---|---|
-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