(Linux) cutコマンドの使い方【行の部分切り出し】

(Linux) cutコマンドの使い方【行の部分切り出し】

 

本記事では、linuxコマンドの一つである
cutコマンドの使い方について、初心者にも分かりやすいよう説明していこうと思う。

 

cutコマンドとは?

cutコマンドは、
ファイルを読み込んで、それぞれの行から指定した部分だけを切り出すコマンドだ。

cutコマンドで指定部分を切り抜く

 

例えば、
「2文字目から9文字目」といったように範囲を指定して切り出すといったことが可能だ。

あるいは、タブなどで区切られたファイルから
「1番目のフィールドと3番目のフィールド」の指定のフィールドを選んで取り出すといったことも可能だ。

 

cutコマンドの使い方




では早速cutコマンドの使い方を紹介していく。

 

cutコマンドの書式

cutコマンドの書式は以下となる。

cut オプション [ファイル]

 

読み込みファイルは省略可能。読み込みファイルを指定しなかった場合は、標準入力から受け取った内容を処理する。

 

 

cutコマンドの主なオプション

cutコマンドの主なオプションは次の通り。

●出力指定オプション(いずれか1つを必ず指定)

短いオプション

長いオプション

意味

-b 出力リスト

–bytes=出力リスト

切り出す位置のリストをバイト数で指定する

-c 出力リスト

–characters=出力リスト

切り出す位置のリストを文字数で指定する

-f 出力リスト

–fields=出力リスト

切り出す位置のリストをタブ区切りのフィールドで指定する(区切り文字は「-d」オプションで変更可能)

 

●リストの指定方法

指定

意味

N

N番目のバイト、文字またはフィールド(行頭を1とする)

N-M

N番目からM番目まで

N-

N番目から行末まで

-M

頭からM番目まで

 

●その他の主なオプション

短いオプション

長いオプション

意味

-d 文字

–delimiter=文字

フィールドの区切り文字として、タブの代わりに使用する文字を指定する(1文字のみ)

–output-delimiter=文字列

出力の区切り文字として使用する文字列を指定する(1文字以上が使用可能。デフォルトでは入力の区切り文字を使用)

-s

–only-delimited

区切り文字を含まない行を出力しない

–complement

出力指定した箇所以外を出力する

 

 

cutコマンドの実用例




では次に実際にcutコマンドを使用する例を踏まえて使い方を紹介する。

 

①バイト数、文字数を指定して切り出す

cutコマンドは、ファイルまたは標準入力から受け取った内容に対し、
それぞれの行から指定した部分だけを出力す

切り出し位置は何文字目から何文字目」あるいは「先頭から何文字目」「何文字目以降」といった具合に、数値で指定可能だ。

例えば、「file.txt」を読み込んで各行の先頭10文字だけ出力したい場合は、バイト単位での指定は「cut -b 1-10 file.txt」、文字数での指定は「cut -c 1-10 file.txt」となる。

日本語のファイルにcutコマンドを使用する際の注意点とて、シフトJISやEUC-JPでは「あいうえお」の5文字は10バイト(1文字2バイト)だが、UTF-8では日本語部分は1文字が3バイトなので「あいうえお」は15バイトになる。

 

また「,」で区切ることで、切り出し位置を複数指定することも可能だ。

例えば、「1バイト目から10バイト目、および52バイト目以降」だけを出力する場合は、「-b 1-10,52-」と指定する。文字数ならば「-c 1-10,52-」となる。

なお、出力する位置を入れ替えることはできない。「cut -b 1-10,52-」と「cut -b 52-,1-10」は、どちらも1~10バイト目と52バイト目以降、という順番で出力される。

 

では実際にcutコマンドで各行の一部分を切り出してみる。

コマンド実行例(冒頭の10バイトと52バイト目以降の部分を出力する)

ls -l | cut -b 1-10,52-

cutコマンドの実行結果

 

上記の実行例では、「ls -l」コマンドの標準出力に対してcutコマンドを使用して、パーミッションを示す冒頭の10バイトと、52バイト目以降のファイル名部分を出力しているのがお分かりいただけると思う。

 

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

CSV(comma-separated values)ファイルなど、「,(カンマ)」やタブで区切られているテキストに対し、何番目のフィールドかを指定したい場合は「-f」オプションを使用する。

“何番目から何番目”の指定は例えば、1番目から5番目ならば「-f 1-5」と指定する。

出力範囲を複数指定したい場合は、「,(カンマ)」で区切る。「-f 2,4,6」といった具合だ。

「-f」オプションでも出力する順番を入れ替えることはできない。「-f 1,5」でも「-f 5,1」でも結果は同じで、最初に1番目のフィールド、続いて5番目のフィールドが出力される。

 

デフォルトの区切り文字は「タブ(Tab)」だ。
区切り文字を変えたい場合は「-d」または「–delim=」で指定する。

使用できるのは「,」など、1文字に限られる。
空白の場合は「–delim=” “」のように指定する。

 

以下の実行例では、「cut_test.txt」ファイルの1番目のフィールドと5番目のフィールドを出力している。「cut_test.txt」ファイルは「:」でフィールドが区切られている

コマンド実行例

#cut_test.txtの中身を普通に出力

root# cat cut_test.txt 
aaa:bbb:ccc:ddd:eee
fff:ggg:hhh:iii:jjj
kkk:lll:mmm:nnn:ooo
ppp:qqq:rrr:sss:ttt
uuu:www:xxx:yyy:zzz


#cut _test.txtの1番目と5番目のフィールドを出力
root# cut -f 1,5 -d : cut_test.txt
aaa:eee
fff:jjj
kkk:ooo
ppp:ttt
uuu:zzz

 

上記の実行例では、「:」でフィールドが区切られた「cut_test.txt」ファイルの内容に対して、cutコマンドを使用して、1番目のフィールドと5番目のフィールドのみを出力しているのがお分かりいただけると思う。

 

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

出力の区切り文字は「–output-delimiter=」オプションで変更可能だ。
出力側の区切り文字は、何文字でも構わない。

 

コマンド実行例

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

 

上記の実行例では、出力の区切り文字を「」(スペースも含む)に変更する例だ。

 

関連記事

(Linux) sedコマンドの使い方まとめ【置換・行挿入・行削除など】

 

https://www.sejuku.net/blog/51830

https://eng-entrance.com/linux-command-cut

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。