大量のログや処理データ(CSV)などから必要なフィールドだけを取り出したい場合に使えるのがcutコマンド。CSVファイルなどで特定のフィールドだけにデータを削ると容量の削減が出来たり、シンプルにその後の処理ができたりする場合もあります。 ログファイルをgrepしてWARNログだけ取得して、cutで時刻とパラメータだけ取得なんて使い方が出来たりします。実際にgrep、cut、sed、sort ぐらいでできるログ解析ってのも結構ありますでからね。
cutコマンドの簡単な使い方を説明します。
以下はCSVファイルの変わりにカンマ(,)区切りのデータをパイプでつないでいますがファイルに対する操作ももちろんできます。
-fでフィールドを指定して、-dでディバイダ(区切り文字)を指定します。 -fはカンマ区切りでフィールド指定もできるし、N-MでNからMまで、N-でN以降のカラムをすべて、-MでM番目までのカラムを全てといった指定も可能。 -f の代わりに-bにするとバイトでの指定、同じく-fの代わりに-cにすると文字(character)単位での指定になる。
3番目と4番目のフィールドを取り出し。
$ echo '1,2,3,4,5' | cut -f 3,4 -d ',' 3,4
3番目までのフィールドを取り出し。
$ echo '1,2,3,4,5' | cut -f -3 -d ',' 1,2,3
3番目以降のフィールドを取り出し。
$ echo '1,2,3,4,5' | cut -f 3- -d ',' 3,4,5