cut - テキストを分割する

cut

cutコマンドは、特定の文字で区切られている文字列を分割するのに使うことができます。単純な表形式のファイル等に対しては、cutコマンドが十分に有効です。もう少し複雑な表形式の場合はawk等を利用することを検討すべきかもしれません。

cutコマンドとは

cutコマンドはファイルのそれぞれの行の選択した部分、つまり、特定の列を標準出力に表示することができます。csvファイルやtsvファイルなどの区切り文字がはっきりしているファイルに対して、とても有効なコマンドです。

cutコマンドの構文

オプション:-bまたは-cまたは-fが必須です。他にもオプションを指定することができます。

入力ファイル:0個以上の入力ファイルを指定できます。入力ファイルがない、または「-」ならば、標準入力が指定されます。

コマンド例の想定

cutコマンドを利用する際に使うファイルとして、以下のファイルを想定します。

また、ファイルの内容は、単純に徒歩5km/h,自転車15km/h,車40km/hでの距離のタイムヒストリになります。ファイルはそれぞれ、タブ区切り(tsvファイル)、コンマ区切り(csvファイル)とします。

data.tsv

data.csv

cutコマンドの利用例

指定した列を表示
(-fオプション)

-fオプションは最初の列が1から始まります。

また、区切り文字がTABであるなら、-dオプションで区切り文字を設定することなく、そのまま使うことができます。

指定する列は、範囲で指定する場合は「1-3」のように指定します。また、列挙をする場合は「1-3,5」のようにコンマで区切ります

コマンド例

実行結果

指定したバイト数で表示
(-bオプション)

-bオプションは指定したバイト数で列を表示することができます。

この例では1から3バイトまでを表示しています。

コマンド例

実行結果

指定した文字数で表示
(-cオプション)

-cオプションは指定した文字数で列を表示します。

この例では、1から3文字までを表示します。

コマンド例

実行結果

GNU coreutils-8.25で、実装上では、-bオプションと同じ動作を行います。そのため、日本語のようなマルチバイト文字が含まれている場合は、意図した動作とは異なる動作をすることに注意が必要です。

区切り文字を変更
(-dオプション)

-dオプションは区切り文字を変更することができます。

特に指定がない場合、区切り文字はTABになります。

この例では、csvファイルに対して、cutコマンドを行うために区切り文字を「,」に指定しています。また、表示する列としては1列目と4列目を選択しています。

コマンド例

実行結果

区切り文字がある行だけを表示
(-sオプション)

-sオプションは区切り文字のある行だけを表示します。

指定したファイルは、標準入力(「-」で指定)とdata.csvになります。

コマンド例

実行結果

「$''」は文字列に対して、ANSI C標準のエスケープ文字を行うことができるbashの機能です。

現在の区切り文字はTABのcsvファイルに対しては何も表示しません。しかし、標準入力で入ってきたTABが含まれている行に対しては、cutコマンドは表示を行います。

表示する区切り文字を変更
(--output-delimiterオプション)

--output-delimiterオプションは、cutコマンドで標準出力に表示させる区切り文字を変更することができます。特に指定をしない場合は、設定されている区切り文字が表示されます。

コマンド例

実行結果

もし、この例で--output-delimiterオプションが設定されていない場合は、「,」が区切り文字として表示されます。

指定した列以外を表示
(--complementオプション)

--complementオプションは、指定した列以外を表示します。特定の列だけを除いて、表を表示したいときに便利です。

コマンド例

実行結果

参考

Gnu Coreutils
(https://www.gnu.org/software/coreutils/manual/coreutils.html)

Gnu Coreutils日本語版
(https://linuxjm.osdn.jp/info/GNU_coreutils/coreutils-ja.html)