Linuxコマンド - cut
概要
cutコマンドとは、ファイルを読み込み、それぞれの行から指定した部分だけを切り出すコマンドである。
ファイルを指定しない場合は、標準入力から受け取った内容を処理する。
例えば、"3文字目から10文字目"を取り出したり、タブ等で区切られたファイルから1番目のフィールドと3番目のフィールドと取り出すことができる。
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