Linux

【Linux】awkコマンドの使い方解説!テキストファイルを処理するためのコマンド

こんにちは、フルスタックエンジニアのryuです。

今回の記事では、Linuxのawk(オーク)コマンドについて解説します。awkコマンドとは、テキストファイルを処理するためのコマンドです。

関連【おすすめ】コマンドを打ちながらLinuxが学べるサイトInfraAcademy

サーバー構築を実践で身につけるInfraAcademy

※本ページには、プロモーション・アフィリエイトリンクが含まれています

【Linux】awkコマンドの使い方

awkコマンドの基本的なコマンド

awkコマンドは、テキストファイルを処理するコマンドです。処理する条件とファイルを指定します。

awk '[処理する条件]' [ファイル名]

条件を指定することで、ファイルの中身を加工して表示してくれます。

例えば、ファイルの中身から2つ目のフィールドを表示させたい場合は、以下のように実行します。

awk '{ print $2 }' file.txt

file.txtの元のデータは、以下のようになっています。

field1 field2 field3 field4
field1 field2 field3 field4

コマンドを実行すると、field2の部分だけ表示されます。

‘{ print $2 }’と指定することで、2番目のフィールドを表示します。awkコマンドは、デフォルトで空白文字部分でフィールドを区切るので、1つ目の空白の次の場所が2番目のフィールドになります。

awkコマンドのオプション

awkコマンドのオプションには、以下のようなものがあります。

オプション説明
-F, –field-separator [区切り文字]フィールドの区切り文字を指定します。デフォルトはスペースとタブです。
-v, –assign [値]変数に値を代入します。
-f, –file [ファイル名]Awkスクリプトを外部ファイルから読み込みます。
-n, –non-decimal-dataデータを10進数以外の形式(8進数、16進数)として解釈します。
-c, –traditionalPOSIXのAwkコンプライアンスモードで実行します。
-W, –word-regexpパターンを単語全体としてマッチさせます。

awkコマンドの具体的な使用例

CSVファイルの特定の部分を出力する

CSVファイルは,(カンマ)で区切られて値が入っています。その場合、-Fオプション使い、区切り文字を,(カンマ)に指定します。

awk -F',''{ print $2 }' file.csv

別のコマンドと同時に使用する

awkコマンドは、|(パイプ)を使うことで、別のコマンドと同時に使用することができます。例えば、lsコマンドの結果をawkコマンドで加工して出力する場合は、以下のように実行します。

ls -la | awk '{ print $1, $9 }'

上記の例では、ls -laコマンドの権限の部分とファイル名だけ出力するように加工しています。

awkコマンドの処理する条件の指定のやり方

awkコマンドは、処理する条件とファイル名を指定します。

ここでは、処理する条件をどのように記述するのかを解説します。

処理する条件を分解すると、パターンとアクションに分けることができます。

awk '[パターン {アクション}]' [ファイル名]

アクションを指定しない場合(デフォルト)は、{print}となり、パターンに沿った文字列を表示します。

パターンの指定方法

パターンは以下条件で指定することができます。

  1. 文字列パターンの指定: パターンとして単純な文字列を指定することができます。例えば、awk '/hello/' file.txtとすると、”file.txt”の中で”hello”という文字列が含まれている行を表示します。
  2. 正規表現の使用: 正規表現を使用してパターンを指定することができます。例えば、awk '/[0-9]+/' file.txtとすると、”file.txt”の中で数字が含まれている行を表示します。
  3. 論理演算子の組み合わせ: 複数のパターンを組み合わせることができます。例えば、awk '/hello/ && /world/' file.txtとすると、”file.txt”の中で”hello”と”world”の両方が含まれている行を表示します。
  4. 条件式の使用: 条件式を使用してパターンを指定することもできます。例えば、awk '$1 > 10' file.txtとすると、”file.txt”の中で1番目のフィールドが10より大きい行を表示します。
  5. ワイルドカードの使用: ワイルドカードを使用してパターンを指定することも可能です。例えば、awk '/^apple/' file.txtとすると、”file.txt”の中で”apple”で始まる行を表示します。

アクションの指定方法

アクションの指定は以下のようにできます。

  1. アクション: アクションは波括弧 {} 内に記述します。例えば、awk '/hello/ { print }' file.txtとすると、”file.txt”の中で”hello”という文字列が含まれている行をすべて表示します。
  2. アクションの組み合わせ: 複数のアクションをセミコロン ; で区切って組み合わせることができます。例えば、awk '{ print $1; print $2 }' file.txtとすると、”file.txt”の各行の1番目と2番目のフィールドを表示します。
  3. 変数の使用: アクション内では変数を使用してデータを操作したり保存したりすることができます。例えば、awk '{ total += $1 } END { print "Total:", total }' file.txtとすると、”file.txt”の1番目のフィールドの合計を表示します。
  4. 条件付きアクション: 条件を使って特定の条件を満たす場合にのみアクションを実行することができます。例えば、awk '{ if ($1 > 10) print "Greater than 10"; else print "Less than or equal to 10"; }' file.txt

このように、パターンとアクションを指定してawkコマンドの条件を設定します。

まとめ

今回はawkコマンドの使い方について解説しました。awkコマンドは、ファイルの加工のために役立つコマンドなので覚えておきましょう。

さらにLinuxのコマンドの学習をしたい人に向けて、InfraAcademyというインフラ学習サービスのご紹介です。

「Linuxの実践的な内容を学習したい」、「コマンドを打ちながらLinuxを学習したい」

そのようなご要望にお応えして、Linuxやネットワークが学習できるサイト「InfraAcademy」をリリースしました!

入門から中級まで初心者でもわかりやすく学習を進めることができます。

↓InfraAcademyの講座の一部です。

上記以外にも、DNSサーバーの構築方法や、Dockerの設定方法などさまざまな講座があります。

インフラエンジニアに必要な知識が学習できます。

InfraAcademyで学習を始める

参考:Linuxのコマンド練習用サイトのInfraAcademyを作成しました。【Linuxのコマンドをブラウザで練習しよう】

ABOUT ME
ryu
大手メーカのIT部門→上場ベンチャーでフルスタックエンジニアやってます。エンジニア歴は8年目。 サーバ、ネットワーク、セキュリティ、クラウドについて投稿します。 AI、ARも勉強中です! youtubeでも技術ネタを発信していきます。↓のアイコンよりご覧ください!
RELATED POST