はじめに
こんにちは!今回はcutコマンドについて解説します。
cutは、テキストの各行から特定の列やフィールドを切り出すコマンドです。CSVファイルやログファイルから必要な部分だけ抽出したい時に便利です。
cutコマンドとは
cutは、テキストの各行を区切り文字で分割して、指定した列(フィールド)を取り出すコマンドです。
例えば、カンマ区切りのCSVから2列目だけ取り出したり、タブ区切りのデータから1列目と3列目だけ抽出したりできます。シンプルですが、データ処理で超よく使います。
基本構文
|
|
主なオプション
| オプション | 説明 |
|---|---|
-f リスト |
フィールド(列)を指定 |
-d 区切り文字 |
区切り文字を指定(デフォルトはタブ) |
-c リスト |
文字位置で指定 |
-b リスト |
バイト位置で指定 |
--complement |
指定した列以外を出力 |
-s |
区切り文字を含まない行をスキップ |
--output-delimiter=文字 |
出力の区切り文字を指定 |
使用例
例1: タブ区切りファイルから特定の列を抽出
|
|
実行結果:
|
|
1列目(名前)だけ抽出されます。
例2: 複数の列を抽出
|
|
実行結果:
|
|
1列目と3列目を抽出。
例3: 範囲指定
|
|
実行結果:
|
|
1列目から3列目まで。
例4: カンマ区切り(CSV)ファイルの処理
|
|
実行結果:
|
|
-d ','でカンマ区切りを指定。
例5: 文字位置で切り出し
|
|
実行結果:
|
|
1文字目から5文字目まで切り出し。
|
|
実行結果:
|
|
6文字目から10文字目まで。
例6: 特定の文字位置のみ
|
|
実行結果:
|
|
1、3、5文字目だけ抽出。
例7: コロン区切りファイル(/etc/passwdなど)
|
|
実行結果:
|
|
ユーザー名、ホームディレクトリ、シェルを抽出。
例8: 出力の区切り文字を変更
|
|
実行結果:
|
|
出力をカンマ区切りに変更。
例9: 指定した列以外を出力
|
|
実行結果:
|
|
2列目(age)以外を出力。
例10: 区切り文字を含まない行をスキップ
|
|
実行結果:
|
|
-sオプションで、カンマを含まない行(xyz)がスキップされます。
実践的な使い方
CSVファイルから特定の列を抽出
|
|
2、4、6列目だけ新しいファイルに保存。
ログファイルからタイムスタンプとメッセージを抽出
|
|
実行結果:
|
|
/etc/passwdからユーザー名とシェルのリスト
|
|
ログイン可能なユーザーのリストを作成。
アクセスログからIPアドレスを集計
|
|
最もアクセスの多いIPアドレストップ10。
CSVの特定列を削除
|
|
メールアドレスからドメインを抽出
|
|
実行結果:
|
|
環境変数PATHを整形
|
|
PATHを1行ずつ表示。
Tips・注意点
-
タブとスペースの違い: デフォルトはタブ区切り
1 2cut -f 1 file.txt # タブ区切り cut -d ' ' -f 1 file.txt # スペース区切り -
複数スペースの扱い: 連続するスペースは1つの区切りとは見なされない
1 2# "a b c"(スペースが2つ)の場合、予期しない結果になる # awkの方が適している場合も -
フィールド番号は1から始まる: 0ではない
1cut -f 1 # 最初のフィールド -
範囲指定の記法:
1 2 3 4cut -f 1-3 # 1から3まで cut -f 1- # 1から最後まで cut -f -3 # 最初から3まで cut -f 1,3,5 # 1、3、5のみ -
区切り文字は1文字のみ: 複数文字の区切り文字は直接指定できない
1 2cut -d ',' -f 1 # OK cut -d '::' -f 1 # エラー(sedやawkを使う)
cutとawkの使い分け
cutはシンプルですが、より複雑な処理にはawkが向いています。
|
|
基本的には:
- シンプルな列抽出 →
cut - 条件分岐や計算が必要 →
awk
まとめ
今回はcutコマンドについて解説しました。
ポイント:
cutでテキストから特定の列を切り出せる-fでフィールド(列)、-cで文字位置を指定-dで区切り文字を指定(デフォルトはタブ)- CSVやログファイルの処理に便利
- 範囲指定や複数指定が可能
- シンプルな処理には最適、複雑な処理はawkを使う
cutはシンプルで高速なので、基本的なデータ抽出には最適です。CSVやTSVファイルから必要な列だけ取り出す時に、ぜひ使ってみてください。
次回もLinuxコマンドの学習を続けていきましょう!