コマンド、構文、および例
awkコマンドは、テキストファイル、特に行(行)と列で構成されたデータファイルを処理または分析する強力な方法です。
シンプルなawkコマンドは、 コマンドラインから実行できます。 より複雑なタスクはawkプログラム(いわゆるawkスクリプト)としてファイルに書き込まれるべきです。
awkコマンドの基本形式は次のようになります。
awk 'パターン{アクション}'入力ファイル>出力ファイルこれは、入力ファイルの各行を取ります。 行にパターンが含まれている場合は、その行にアクションを適用し、結果の行を出力ファイルに書き込みます。 パターンを省略すると、アクションはすべての行に適用されます。 例えば:
awk '{print $ 5}' table1.txt> output1.txtこのステートメントは、各行の5番目の列の要素を取り出し、出力ファイル "output.txt"に1行として書き込みます。 変数 '$ 4'は2番目の列を参照します。 同様に、$ 1、$ 2、$ 3などで1番目、2番目、3番目の列にアクセスすることができます。デフォルトでは、列は空白またはタブ(いわゆる空白)で区切られています。 したがって、入力ファイル "table1.txt"に次の行が含まれているとします。
1、ジャスティンティンバーレイク、タイトル545、価格$ 7.30 2、テイラースウィフト、タイトル723、価格$ 7.90 3、ミックジャガー、タイトル610、価格$ 7.90 4、レディガガ、タイトル118、価格$ 7.30 5、ジョニーキャッシュ、タイトル482、価格$ 6.50 6、エルヴィス・プレスリー、タイトル335、価格$ 7.30 7、ジョン・レノン、タイトル271、価格$ 7.90 8、マイケル・ジャクソン、タイトル373、価格$ 5.50コマンドは次の行を出力ファイル "output1.txt"に書き込みます。
545、723、610、118、482、335、271、373、列の区切り文字がスペースやタブ以外のもの(カンマなど)である場合は、awkステートメントで次のように指定できます。
awk -F、 '{print $ 3}' table1.txt> output1.txtこれは、列がカンマで区切られていると見なされる場合、各行の3列目の要素を選択します。 したがって、この場合の出力は次のようになります。
タイトル545タイトル723タイトル610タイトル118タイトル482タイトル335タイトル271タイトル373中括弧( '{'、 '}')内のステートメントのリストはブロックと呼ばれます。 条件式をブロックの前に置くと、ブロック内のステートメントは条件がtrueの場合にのみ実行されます。
awk '$ 7 == "\ $ 7.30" {print $ 3} "table1.txtこの場合、条件は$ 7 == "\ $ 7.30"であり、これは列7の要素が$ 7.30に等しいことを意味します。 ドル記号の前のバックスラッシュは、システムが$ 7を変数として解釈するのを防ぐために使用され、ドル記号をそのまま使用します。
したがって、このawkステートメントは、各行の3列目の要素を、7列目に「$ 7.30」を持つように出力します。
条件として正規表現を使用することもできます。 例えば:
awk '/ 30 / {print $ 3}' table1.txt2つのスラッシュ( '/')間の文字列は正規表現です。 この場合、文字列 "30"だけです。 つまり、行に文字列 "30"が含まれている場合、システムはその行の3番目の列に要素を出力します。 上記の例の出力は次のようになります。
ティンバーレイク、ガガ、プレスリー、テーブル要素が数値の場合、awkは次の例のように計算を実行できます。
awk '{print($ 2 * $ 3)+ $ 7}'現在の行($ 1、$ 2など)の要素にアクセスする変数に加えて、完全な行(行)を参照する変数$ 0と、フィールドの数に保持される変数NFがあります。
次の例のように、新しい変数を定義することもできます。
awk '{sum = 0; for(col = 1; col <= NF; col ++)sum + = $ col; プリント合計。 } 'これは、各行のすべての要素の合計を計算して出力します。
awkの文は、 sedコマンドと組み合わされることが多いです。