ウェブサイト検索

Linux 上の AWK プログラミング言語のガイド


導入

AWK は、Linux でのテキスト処理に使用されるスクリプト言語です。テキスト ファイル内のデータを操作するように設計されており、データ分析や管理タスクに最適なツールです。 AWK は、さまざまな組み込み関数と演算子を使用して、単純な検索と置換タスク、または複雑なデータ変換を実行できます。その簡潔な構文と多用途性により、テキスト ファイルを簡単に操作できます。 AWK は、Linux 環境でテキスト ファイルを扱う人にとって強力なツールです。

Linux 上の AWK プログラミング言語の初心者向けガイドを提供しましょう。言語の基本的な構文、AWK を使用して実行できるさまざまな種類の操作、AWK を使用してテキスト ファイルを処理する方法について説明します。また、対象となる各操作のコード例と出力も提供します。

Linux オペレーティング システムへの AWK のインストール

これをインストールする 1 つの方法は、Linux ディストリビューションが提供するパッケージ マネージャーを利用することです。インストールコマンドは次のとおりです-

$ sudo apt-get install gawk

インストール後、LinuxでAWKのバージョンを確認できます-

$ awk --version

AWK がインストールされている場合、コマンドによりバージョン番号が表示されます。

AWK プログラミング言語の変数

AWK には、パターンやアクションで使用できる組み込み変数が多数用意されています。最も使用される変数は次のとおりです-

  • NR - 現在のレコード (行) 番号を表します

  • NF - 入力レコード内のフィールドの合計数を表します。

  • $0 - 現在のレコード全体。

  • $1, $2, $3, … - 現在のレコードの 1 番目、2 番目、3 番目、… フィールド。

これらの組み込み変数に加えて、AWK ではユーザー定義変数も使用できます。=演算子を使用して、ユーザー定義変数に値を割り当てることができます。

AWK コマンドライン オプション

AWK は通常、さまざまなオプションと引数を受け入れる awk コマンドを使用してコマンド ラインから呼び出されます。これは一般的に使用されるオプションのリストです-

  • -F - 入力ファイルのフィールド区切り文字を指定します。

  • -v -変数の値を設定します。

  • -f - 実行する AWK スクリプト ファイルを指定します。

  • -n - 行の自動印刷を無効にします。

  • -W - 警告を有効にします。

AWK を使用したファイルからのフィールドの抽出

次の形式のCSVファイル名「filename.csv」があるとします-

name, age, gender
Papan, 22, Male
Priya, 27, Female

年齢と性別フィールドを抽出するには、次のコマンドを使用できます-

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

この AWK コードは、「filename.csv」という CSV ファイルの 2 番目と 3 番目のフィールド (列) を、区切り文字をカンマ (「,」) にして出力します。

説明は次のとおりです-

  • ‘awk’ - AWK スクリプトの実行に使用されるコマンド

  • ‘-F,’ - このオプションはフィールド区切り文字をカンマに設定します。これにより、AWK は CSV ファイルをフィールド間の区切り文字としてカンマが含まれているものとして扱うように指示されます。

  • “ ' { print $2, $3 }' ” - これは AWK スクリプト自体です。これは、ファイル内の各行の 2 番目と 3 番目のフィールドをスペースで区切って出力するように AWK に指示します。

age gender
22 Male
27 Female

このコマンドは、フィールド区切り文字をカンマ (-F,) に設定し、ファイル内の各行の 2 番目と 3 番目のフィールド ($2、$3) を出力します。

AWK コマンドを使用したデータのフィルタリング

「data.txt」というファイルには、名前、年齢、学年などの生徒に関する情報が含まれています。成績が「A」の生徒だけを除外したいと考えています。

以下の内容を「data.txt」ファイルに配置します-

John, 18, A
Sara, 19, B
Mike, 20, A
Lisa, 18, C
Tom, 19, A

「A」の成績を持つ生徒をフィルタリングするには、次のAWKコマンドを使用できます-

$ awk '$3=="A" {print}' data.txt

出力

John, 18, A
Mike, 20, A
Tom, 19, A

ご覧のとおり、グレードが「A」の行のみが印刷されています。

AWK コマンドで if ステートメントを使用して、より複雑なフィルタリングを実行することもできます。たとえば、18歳以上で成績が「A」の生徒のみをフィルタリングしたい場合は、次のAWKコマンドを使用できます-

$ awk '$2>18 && $3=="A" {print}' data.txt

出力

Mike, 20, A
Tom, 19, A

見てわかるように、両方の条件を満たす行のみが出力されています。

AWKコマンドを使用したfor Loopsの実装

3つのループがあります-

  • while ループ

  • do-while ループ

  • for ループ

ここでは「for ループ」のみを実装しています。

まず「input.txt」ファイルを作成し、以下の内容を追加します-

Soumen,25
Bob,30
Papan,22
Aditya,40
Joy,35

ここで、AWK のループを使用してこのファイル内のデータを処理する方法を見てみましょう。

別のファイル名「program.awk」を作成します

次のAWKプログラムは、forループを使用してファイルの各行を出力します-

{
   for (i = 1; i <= NF; i++) {
      printf("%s ", $i);
   }
   printf("
");
}

このプログラムでは、パターンは空白です。これは、アクションがファイルの各行に適用されることを意味します。このアクションは、NF (フィールド数) 変数を使用して行の各フィールド (列) を反復する for ループで構成されます。ループ内では、printf 関数を使用して各フィールドとその後にスペースを出力します。ループの後、printf 関数が再度使用され、改行文字が出力されます。

このプログラムを実行するには、次のコマンドを使用できます-

$ awk -F, -f program.awk input.txt

ここで、「program.awk」は AWK プログラムのファイル名で、「-F」はフィールド区切り文字がカンマであることを指定します。

Soumen,25
Bob,30
Papan,22
Aditya,40
Joy,35

「input.txt」ファイルのすべての行が出力されることがわかります。

結論

この記事では、Linux 上の AWK プログラミング言語を紹介し、実用的なコード例とそれに対応する出力を示します。 AWK は、テキスト データを処理し、そこから関連情報を抽出するための非常に効率的なツールです。このガイドでは、ループを含む AWK の基本的なプログラミング概念について説明します。この知識があれば、Linux 上で独自の AWK プログラムを作成できるようになります。