Linuxコマンド - cut

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2021年1月7日 (木) 02:32時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == cutコマンドとは、ファイルを読み込み、それぞれの行から指定した部分だけを切り出すコマンドである。<br> ファイ…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

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

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


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