cutはテキストファイルを横方向に分割するコマンドだ。
csvデータなどの一覧表から、必要な項目だけを抜き出す時に使う。
今回は、cutコマンドを活用したテキストファイルから、必要な情報を抜き出す方法を解説する。
目次
コマンドの概要
ファイルdata2.txtは、次のような内容だ。
1 2 3 4 5 |
01:orange:250:Tokyo 02:apple:230:Nagoya 03:apple:130:Nagoya 04:grape:450:Tokyo 05:orange:150:Osaka |
「:」で区切られ、1項目目はデータの管理番号、2項目目は商品名、3項目目は単価、4項目目は生産地だ。
すべての情報はcatコマンドなどでテキストファイルの内容を表示させればよい。
しかし、以下のように必要な情報は商品名と単価のみという場合もあるだろう。
1 2 3 4 5 |
orange:250 apple:230 apple:130 grape:450 orange:150 |
cutコマンドは、このように横に長いデータから必要な項目だけを抜き出して表示する時に使用する。
cutは、どの項目が必要か指定したり、区切り文字が何か指定したりする必要があり、その指定には次に説明するオプションが必須となっている。
cutコマンドのオプションたち
オプションの一覧
後から詳細をご紹介するが、まずは一覧で見てみよう。
オプション -b(オプション--bytes)
必要な項目をバイト数で指定する
オプション -d(オプション--delimiter)
区切り文字を指定する
オプション -f(オプション--fields)
必要な項目を項目数で指定する
-bオプション(--bytesオプション):必要な項目をバイト数で指定する
必要な項目をバイト数で指定することができる。
書式は次のとおりだ。
$ cut -b バイト数 ファイル名
ファイルcutdata.txtの各行の2バイト目(半角英数2文字目)を表示する場合は、次のコマンドだ。
$ cut -b 2 cutdata.txt
各行の2バイト目(半角英数2文字目)を表示した。
管理番号の1桁目だけが表示されている。
次に説明するが、-bオプションでは1文字だけはなく何文字も表示することができる。
連続文字の指定
2つのバイト数を「-」で連結することでその範囲を表示することができる。
ファイルcutdata.txtの各行の2バイト目から4バイト目を表示する場合は、次のコマンドだ。
$ cut -b 2-4 cutdata.txt
各行の2バイト目から4バイト目を表示した。
離れた文字の指定
バイト数を「,」で連結することで、指定した複数の文字を表示することができる。
ファイルcutdata.txtの各行の2バイト目と4バイト目を表示する場合は、次のコマンドだ。
$ cut -b 2,4 cutdata.txt
各行の2バイト目と4バイト目を表示した。
離れた文字と連続した文字両方の指定
「-」「,」を組み合わせることもできる。
ファイルcutdata.txtの各行の2バイト目から4バイト目と7バイト目から10バイト目までを表示する場合は、次のコマンドだ。
$ cut -b 2-4,7-10 cutdata.txt
2バイト目から4バイト目と7バイト目から10バイト目までを表示した。
それ以降の指定
「-」で指定した場合に後ろの数字を指定しなければそれ以降を表示する。
ファイルcutdata.txtの各行の2バイト目と4バイト以降を表示する場合は、次のコマンドだ。
$ cut -b 2,4- cutdata.txt
2バイト目と4バイト以降を表示した。
-dオプション(--delimiterオプション):区切り文字を指定する
区切り文字によって項目名を区切る場合は、-dオプションで区切り文字を指定する。
-dオプションは、次の-fオプションと組み合わせて使用する。
-fオプション(--fieldsオプション):必要な項目を項目数で指定する
-dオプションによって区切られた項目の中で表示したい項目を項目数で指定するオプションで、書式は次の通りだ。
区切り文字は「"」で囲む。
$ cut -f 項目数 -d 区切り文字 ファイル名
ファイルcutdata.txtを「:」の文字で区切り、その2項目目を表示する場合は、次のコマンドだ。
$ cut -f 2 -d ":" cutdata.txt
「:」の文字で区切り、その2項目目(商品名)を表示した。
cutコマンドの結果をファイルに出力する
cutコマンドは、ディスプレイに結果を表示するが、大量のデータを処理した場合は、ファイルに出力した方が都合がよい。
ファイルに出力するには、リダイレクトする。
書式は次の通りだ。
$ cut オプション 対象ファイル > 出力ファイル
ファイルcutdata.txtを「:」の文字で区切り、その2項目目の結果をファイルresult.txtとして保存する場合は次の通りだ。
$ cut -f 2 -d ":" cutdata.txt > result.txt
cut関連コマンド
最後にcutコマンドに関連して、基本的なテキストファイル操作のコマンドも紹介しておく
sortコマンド
テキストファイルを並べ替えする。
grepコマンド
テキストファイルの中から文字列を探し出す。
まとめ
今回は、cutコマンドを使ったテキストファイルからの項目の抜き出しの方法を解説した。
様々なデータやログはテキスト形式のファイルとなるが、その一部から必要なデータだけを抜き出し、活用することがあるだろう。
sortコマンド、grepコマンドと組み合わせることによって、Linuxコマンドでありながらデータベースに近い操作をすることができる。
アクセスログやシステム管理ファイルを見やすい形に加工できるので、利用範囲は幅広い。
ぜひ覚えておこう。
離れた文字の指定の例が2-4になってます。2,4では?
ご指摘ありがとうございます。上に引っ張られ、同じ文言になっていますね。修正いたします。