ウェブサイト検索

Linux の AWK コマンドと例


Linux を使用している場合は、AWK コマンドに遭遇したことがあるかもしれません。 AWK は、データのフィルタリング、操作、変換などのさまざまなタスクに使用される強力なテキスト処理ツールです。この記事では、構文、機能、使用例など、AWK コマンドについて詳しく説明します。

Linux の AWK コマンドとは何ですか?

AWK は、テキスト処理とデータ操作に使用されるプログラミング言語およびツールです。通常、テキスト ファイルからデータを抽出して操作するために使用されますが、レポートの生成やデータの分析など、より複雑なタスクにも使用できます。 AWK は、ほぼすべての Unix ベースのシステムで利用でき、多くの場合、sed や grep などの他のコマンドライン ツールと組み合わせて使用されます。

AWK コマンド構文

AWK コマンドの構文は、一連のパターンとアクションで構成されます。パターンは入力の特定の行を照合するために使用され、アクションはそれらの行に対して何を実行するかを指定するために使用されます。これは、AWKコマンドの基本構文の例です-

awk 'pattern { action }' input_file

パターンは一重引用符で囲まれ、入力ファイルのどの行を処理するかを指定します。 action は中括弧で囲まれており、これらの行で何を実行するかを指定します。複数のパターンとアクションを組み合わせて、より複雑なスクリプトを作成できます。

AWKコマンドの機能

AWK には、データの操作と処理に使用できるさまざまな組み込み関数があります。最も一般的に使用される関数のいくつかを次に示します-

  • print -この関数は、テキストをコンソールまたはファイルに出力するために使用されます。

  • printf -この関数は、テキストをフォーマットし、コンソールまたはファイルに出力するために使用されます。

  • length -この関数は文字列の長さを決定するために使用されます。

  • substr -この関数は、文字列から部分文字列を抽出するために使用されます。

  • split -この関数は、指定された区切り文字に基づいて文字列を配列に分割するために使用されます。

  • getline -この関数は、入力の次の行を読み取るために使用されます。

AWK コマンドの例

AWK コマンドの基本的な構文と機能を理解したところで、その使用例をいくつか見てみましょう。

例 1: ファイルの内容を印刷する

AWK コマンドの最も簡単な使用法は、ファイルの内容をコンソールに出力することです。その方法は次のとおりです-

awk '{ print }' input_file

このスクリプトは入力ファイルのすべての行と一致し、それをコンソールに出力します。

例 2: ファイルの特定の列を印刷する

AWK の最も一般的な使用法の 1 つは、ファイルから特定の列を抽出することです。ファイルの最初と3番目の列を抽出する方法は次のとおりです-

awk '{ print $1, $3 }' input_file

このスクリプトは入力ファイルのすべての行と一致し、最初と 3 番目の列をコンソールに出力します。

例 3: 条件に基づいて行をフィルタリングする

AWK を使用して、条件に基づいて行をフィルタリングすることもできます。 「エラー」という単語を含むファイル内のすべての行を印刷する方法は次のとおりです-

awk '/error/ { print }' input_file

このスクリプトは、入力ファイル内の「error」という単語を含むすべての行と一致し、それをコンソールに出力します。

例 4: 列内の値を合計する

AWK を使用して、データに対して数学的演算を実行することもできます。ファイルの2番目の列の値を合計する方法は次のとおりです-

awk '{ sum += $2 } END { print sum }' input_file

このスクリプトは、入力ファイルの 2 列目のすべての値を合計し、合計をコンソールに出力します。

例 5: 列から部分文字列を抽出する

もう 1 つの一般的なタスクは、ファイル内の列から部分文字列を抽出することです。ファイルの最初の列から最初の3文字を抽出する方法は次のとおりです-

awk '{ print substr($1, 1, 3) }' input_file

このスクリプトは、入力ファイルの最初の列から最初の 3 文字を抽出し、コンソールに出力します。

例 6: 共通の列に基づいて 2 つのファイルを結合する

AWK を使用して、共通の列に基づいて 2 つのファイルを結合することもできます。最初の列の値に基づいて 2 つのファイルを結合する方法は次のとおりです-

awk 'NR==FNR{a[$1]=$2;next}{ print $0, a[$1] }' file1 file2

このスクリプトは最初のファイルをメモリに読み取り、2 番目の列に値を含む配列を作成します。次に、2 番目のファイルを読み取り、各行を出力し、その後に最初のファイルの対応する値を出力します。

例 7: ファイルの最初の列を抽出する

AWKコマンドを使用してファイルの最初の列を抽出するには、次の構文を使用します-

$ awk '{ print $1 }' filename

ここで、$1 は入力ファイルの最初の列を指します。 print コマンドは出力を表示するために使用されます。

例 8: 列の平均を計算する

AWKコマンドを使用して列の平均を計算するには、次の構文を使用します-

$ awk '{ sum += $1 } END { print sum / NR }' filename

ここで、sum は最初の列の値の合計を格納する変数です。 NR は、AWK コマンドによって処理されたレコード (行) 数を格納する組み込み変数です。 END パターンは入力ファイルの終わりと一致します。

例 9: ファイル内の文字列を置換する

AWKコマンドを使用してファイル内の文字列を置換するには、次の構文を使用します-

$ awk '{ gsub("oldstring", "newstring") } 1' filename

ここで、 gsub は、出現するすべての oldstring を newstring に置き換える関数です。 1 つのパターンは入力ファイルのすべての行に一致します。

例 10: ファイルの最後のフィールドを表示する

AWKコマンドを使用してファイルの最後のフィールドを表示するには、次の構文を使用します-

$ awk '{ print $NF }' filename

ここで、$NF は入力ファイルの最後のフィールドを指します。 print コマンドは出力を表示するために使用されます。

例 11: 正規表現の使用

正規表現は、ユーザーがデータ内のパターンを検索できるようにする AWK コマンドの強力な機能です。これは正規表現の使用を示す例です-

$ awk '/pattern/ { print }' filename

ここで、/pattern/ は、pattern を含む行と一致する正規表現です。

例 12: 変数の使用

AWK コマンドで変数を使用して、アクションで使用できる値を保存できます。これは変数の使用を示す例です-

$ awk '{ total += $1 } END { print "Total: ", total }' filename

ここでは、変数 total を使用して、最初の列に値の合計を格納します。

例 13: 組み込み変数の使用

AWK コマンドには、さまざまなタスクの実行に使用できるいくつかの組み込み変数があります。以下にいくつかの例を示します-

  • FS - フィールド区切り変数は、入力ファイル内のフィールドを区切るために使用される区切り文字を指定するために使用されます。デフォルトでは、空白に設定されています。

  • RS - レコード区切り変数は、入力ファイル内のレコードを区切るために使用される区切り文字を指定するために使用されます。デフォルトでは、改行文字に設定されています。

  • OFS - 出力フィールド区切り変数は、出力のフィールドを区切るために使用される区切り文字を指定するために使用されます。デフォルトでは、空白に設定されています。

  • ORS - 出力レコード区切り変数は、出力内のレコードを区切るために使用される区切り文字を指定するために使用されます。デフォルトでは、改行文字に設定されています。

例 14: 制御ステートメントの使用

if-else ループや while ループなどの制御ステートメントを AWK コマンドで使用して、条件付き操作を実行できます。これは、if-elseステートメントの使用を示す例です-

$ awk '{ if ($1 > 50) { print "Pass" } else { print "Fail" } }' filename

ここで、最初の列の値が 50 より大きい場合、出力は「合格」、それ以外の場合は「失敗」となります。

例 15: 関数の使用

関数を AWK コマンドで定義して使用して、複雑な操作を実行できます。これは関数の使用を示す例です-

$ awk 'function square(x) { return x*x } { print square($1) }' filename

ここでは、関数 square が定義され、最初の列の値の 2 乗を計算するために使用されます。

結論

AWK コマンドは、Linux でのテキスト処理とデータ操作のための強力なツールです。シンプルな構文、組み込み関数、複雑なタスクを実行できる機能を備えた AWK は、Linux ユーザーにとって不可欠なツールです。この記事の例を使用することで、AWK を使い始めて、その可能性を最大限に活用できるようになります。