Linuxコマンド「cut」で効率よくデータを抽出する方法 | アントレプログラマー

Linuxコマンド「cut」で効率よくデータを抽出する方法

Linux

こんにちは、ニキです。

Linuxで作業をしていると、ファイルや文字列から特定の部分だけを抽出したいことがあります。例えば、ログファイルの一部を確認したいときや、カンマで区切られたCSVファイルの特定の列だけを表示したい場合です。そんなときに便利なのが「cut」コマンドです。

この記事では、Linuxの「cut」コマンドを使ったデータの抽出方法について、具体例を交えながら詳しく説明していきます。基本的な使い方から、実際の現場で役立つ応用テクニックまでを紹介しますので、初心者から中級者まで、幅広い方に役立つ内容となっています。

Takaharu Niki

・Webエンジニア6年目。
・バックエンドを中心に、フロントエンドやDevOps業務も経験。
・現在は、自社サービス企業のテックリードとして従事。

Takaharu Nikiをフォローする

Linux コマンド cutの基本構文とオプション

まずは、基本的な「cut」コマンドの使い方を確認しましょう。「cut」は主に3つの方法でテキストを分割し、特定の部分を取り出すことができます。指定できるのは「文字数で切り出す」「フィールドで切り出す」「バイト単位で切り出す」という3つです。

基本構文は以下の通りです。

cut [オプション] ファイル名

次に、よく使うオプションを見ていきましょう。

-c オプション(文字で切り出す)

「-c」オプションは、文字単位で列を指定してデータを抽出します。例えば、ファイルの中で5番目から10番目の文字を表示したい場合は以下のようにします。

cut -c 5-10 ファイル名

このコマンドは、各行の5文字目から10文字目までを表示します。文字列の特定の範囲だけを表示したいときに便利です。

-f オプション(フィールドで切り出す)

「-f」オプションは、デリミタ(区切り文字)で区切られたフィールドを指定してデータを抽出します。デフォルトではタブ区切りになっていますが、他の区切り文字も指定できます。例えば、カンマ区切りのCSVファイルから第1列と第3列を抽出する場合は次のようにします。

cut -d ',' -f 1,3 ファイル名

ここでは「-d ‘,’」でカンマを区切り文字として指定し、「-f 1,3」で1列目と3列目を取り出しています。

-b オプション(バイトで切り出す)

「-b」オプションは、バイト単位でデータを切り出すものです。バイト単位で指定することで、特定のバイト数だけを表示することができます。例えば、1バイト目から10バイト目までを取り出すには以下のようにします。

cut -b 1-10 ファイル名

この方法は、固定幅のファイルやバイナリデータの解析に役立つことがありますが、UTF-8などのマルチバイト文字列には注意が必要です。日本語などのマルチバイト文字を扱う場合、「-c」オプションを使う方が適しています。

Linux コマンド cutの実用的な使用例

基本的な使い方を理解したところで、次に「cut」コマンドを使った実際の作業例をいくつか紹介します。これらの例は、日常のLinux操作やシェルスクリプトで役立つ場面を想定しています。

ログファイルから特定のカラムを抽出

システムのログファイルなどは、スペースやタブで区切られたデータが多く、その中から特定の列だけを表示したいことがあります。例えば、次のようなログファイルがあるとします。

2024-09-16 12:34:56 INFO User login successful
2024-09-16 12:35:10 ERROR Failed to authenticate user
2024-09-16 12:36:00 INFO System reboot initiated

このファイルから日付(1列目)とログレベル(3列目)だけを抽出したい場合は、以下のコマンドを使います。

cut -d ' ' -f 1,3 ファイル名

結果は次のようになります。

2024-09-16 INFO
2024-09-16 ERROR
2024-09-16 INFO

CSVファイルの特定列を抽出して加工

CSVファイルから特定の列を抽出するのも「cut」の得意な作業です。例えば、次のようなCSVファイルがあるとします。

Name, Age, Country
John, 28, USA
Emma, 22, Canada
Taro, 30, Japan

このファイルから名前(1列目)と国名(3列目)を抽出したい場合、次のようにコマンドを実行します。

cut -d ',' -f 1,3 ファイル名.csv

結果は以下の通りです。

Name, Country
John, USA
Emma, Canada
Taro, Japan

これで、不要なデータを省いて必要な部分だけを簡単に抽出することができました。

Linux コマンド cutの制約と対策

「cut」コマンドは非常に便利ですが、いくつかの制約もあります。例えば、「cut」は一度に1種類の区切り文字しか扱えないため、異なる区切り文字を持つファイルではうまくいかない場合があります。また、「cut」はマルチバイト文字(特に日本語のようなUTF-8エンコーディング)に対してバイト単位で操作すると正しく切り出せないことがあります。

区切り文字が複数ある場合の対応策

区切り文字が複数ある場合や、柔軟なデータ抽出が必要な場合は、正規表現が使える「awk」や「sed」コマンドの方が適しています。しかし、簡単なデータ処理や列単位の抽出には「cut」が最適です。

例えば、次のようなデータがあるとします。

ID: 123 | Name: John | Age: 28
ID: 124 | Name: Emma | Age: 22

この場合、「cut」では区切り文字をうまく扱えないため、「awk」を使う方法が考えられます。

awk -F '|' '{print $2, $3}' ファイル名

このコマンドは、「|」で区切られた2列目と3列目を抽出し、名前と年齢だけを表示します。

まとめ

Linuxの「cut」コマンドは、シンプルかつ強力なツールで、特定の列や文字範囲を効率よく抽出するために非常に役立ちます。特にログファイルの解析や、CSVファイルの一部を抽出する作業には最適です。今回は、基本的な使い方から実際の応用例、さらには制約とその対策までを紹介しました。

「cut」コマンドを使いこなすことで、データの抽出作業がより簡単かつスピーディーに行えるようになります。ぜひ、日常のLinux操作に取り入れて、効率的な作業を実現してください。

タイトルとURLをコピーしました