本記事では、linuxコマンドの一つである
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」となる。
また「,」で区切ることで、切り出し位置を複数指定することも可能だ。
例えば、「1バイト目から10バイト目、および52バイト目以降」だけを出力する場合は、「-b 1-10,52-」と指定する。文字数ならば「-c 1-10,52-」となる。
では実際にcutコマンドで各行の一部分を切り出してみる。
コマンド実行例(冒頭の10バイトと52バイト目以降の部分を出力する)
ls -l | cut -b 1-10,52-
上記の実行例では、「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
上記の実行例では、出力の区切り文字を「 — 」(スペースも含む)に変更する例だ。
関連記事
https://www.sejuku.net/blog/51830
https://eng-entrance.com/linux-command-cut
コメントを残す