cut コマンドは、入力の各行から指定した文字位置またはフィールドを選びます。区切り文字とフィールド位置が一定した構造化テキストに適しています。
例に使うタブ区切りファイルを作ります。printf は \t をタブ、\n を改行として解釈します。
$ printf 'name\trole\nalice\tadmin\nbob\tviewer\n' > team.tsv
テキスト操作 · レッスン 6
cut を使い、各行から文字位置または区切られたフィールドを選択する方法を学びます。
cut コマンドは、入力の各行から指定した文字位置またはフィールドを選びます。区切り文字とフィールド位置が一定した構造化テキストに適しています。
例に使うタブ区切りファイルを作ります。printf は \t をタブ、\n を改行として解釈します。
$ printf 'name\trole\nalice\tadmin\nbob\tviewer\n' > team.tsv
各行の位置を選ぶには -c LIST を使います。位置は 1 から始まります。
$ cut -c 1 team.tsv
n
a
b
$ cut -c 1-4 team.tsv
name
alic
bob
$ cut -c 1,3 team.tsv
nm
ai
bb
リストには個別の位置や範囲を指定できます。空白、タブ、句読点も位置を占め、cut は各行を独立して処理します。
names.txt の各行から最初の文字を表示するコマンドはどれですか?
フィールドは -f LIST で選び、標準の区切り文字はタブです。
$ cut -f 2 team.tsv
role
admin
viewer
文字選択と同様、1、1,3、2-4、-3、2- などをリストに指定できます。
team.tsv の各行から 2 番目のタブ区切りフィールドを表示するコマンドはどれですか?
タブ以外で区切られたフィールドでは、-d CHARACTER と -f を使います。
$ printf 'alice;admin\nbob;viewer\n' > team.txt
$ cut -d ';' -f 1 team.txt
alice
bob
この形式の区切り文字は 1 文字です。引用符のないセミコロンはシェルで制御用の意味を持つため引用します。
team.txt の 2 番目のセミコロン区切りフィールドを表示するコマンドはどれですか?
フィールドモードでは、区切り文字のない行は通常そのまま表示されます。抑制するには -s を加えます。
$ printf 'alice;admin\nheader\nbob;viewer\n' | cut -s -d ';' -f 2
admin
viewer
これは一般的な CSV の検証には使えません。CSV には引用された区切り、埋め込み改行、エスケープ規則があるため、CSV 対応ツールを使ってください。
cut -d ':' -f 1 で -s は何をしますか?
ファイルを指定しない場合や入力オペランドに - を使う場合、cut は stdin を読みます。そのためパイプラインの処理段階に適しています。
$ printf 'red:1\nblue:2\n' | cut -d ':' -f 1
red
blue
generate-data | cut -d ':' -f 1 で、cut はどこから入力を読みますか?
位置とフィールドの選択を練習するには、次のラボを試してください。
cut でテキストファイルから列やフィールドを抽出します。cut、grep、wc、sort、uniq を学びます。レッスン完了
cut を使い、行指向テキストから一定した位置を選択できるようになりました。
個別の文字位置や範囲を選択する。
-f でタブ区切りフィールドを抽出する。
-d で 1 文字の区切りを指定する。
必要に応じて区切りのない行を抑制する。
ファイルまたは stdin から構造化テキストを読む。