Awkは、データ抽出、テキスト処理、さらにはフォーマットされたレポートの作成などの目的で開発された最も人気のあるユーティリティです。 sedにはテキスト処理の制限があるため、sedに非常に似ていますが、sedよりも強力です。 AWKは、開発者のAlfred Aho、Peter J. Weinberger、Brian Kernighanの最初の文字を使用して名前が付けられているため、その名前に特定の意味はありません。
この記事では、知っておく必要のある10のすばらしいawkコマンドについて学習します。例として、student.txtに次のデータセットを作成して追加しました。データセットには4つの列があり、最初のフィールドには名が含まれ、2番目のフィールドには2番目の名前が含まれ、3番目のフィールドには年齢が含まれ、最後のフィールドにはクラスが含まれます。
変数を使用した特定のフィールドの印刷
Awkには、それぞれの目的を持つ多くのビルド済み変数があります。このコマンドを使用すると、$ xを使用してすべての特定のフィールドデータを出力できます。ここで、xはフィールド番号の位置を示します。
$ awk '{print $1, $2}' student.txt
BEGIN変数
BEGIN変数は、データを処理する前にスクリプトを実行したときに、結果のデータにヘッダーまたはタイトルを追加するために使用されます。これは、データテーブルをフォーマットする際のインデックス作成に役立ちます。次の例では、インデックスとしてテキストを印刷してから、すべての生徒の名前を印刷しています。
$ awk 'BEGIN {print "Students : "} {print $1}' student.txt
END変数
ENDは、データ処理後にスクリプトを実行するため、BEGINの正反対です。データセットの最終レポートに使用できます。次の例では、すべての学生の年齢を印刷してから、いくつかの終了メッセージを印刷しました。
$ awk '{print $3} END { print "These are student age " } ' student.txt
ファイルセパレータ
スペースとタブスペースはawkコマンドのデフォルトの区切り文字ですが、コンマ、スラッシュなどの他の区切り記号に基づいてテキストを区切ることができます。これを実現するには、コマンドに-Fフラグを追加し、単一引用符で区切り文字を指定する必要があります。 。
$ awk -F':' '{print $1}' /etc/passwd
ファイルからスクリプトを実行する
ファイルからawkスクリプトを実行することもできます。これにより、レポートを効率的に作成できるようになります。このためには、ファイルを作成してからスクリプトを記述し、awkコマンドを使用して実行する必要があります。デモでは、ファイル名demo_scriptを作成し、次のスクリプトをコピーして貼り付けることができます。
$ vi demo_script { sum+=$3 } END { print("Sum of all student age is", sum) }
awkコマンドは、ファイルからスクリプトを実行するための-fフラグを提供します。
$ awk -f demo_script student.txt
複数のスクリプトの使用
セミコロンを使用して複数のスクリプトを実行できます。次の例では、テキストを印刷してから、awkを使用して出力をパイプ処理し、変更された結果を印刷しました。
$ echo "Hello, Dr. John" | awk '{$3="George"; print $0}'
行数を数える
行番号をレポートに自動的に出力するawk組み込み変数であるNR変数を使用して、レポートに番号を割り当てることができます。
$ awk '{print NR "\t" $0}' student.txt
フィールド数のカウント
時々、データを準備しているときに、特定の列にデータを追加するのを忘れたため、レポートに不規則性が生じる可能性があります。 NF変数を使用してフィールドをカウントできるため、レポートの確認と整理が容易になります。
$ awk '{print NR".",$0 "\n Count=" NF}' student.txt
条件の場合
条件付きレポートの作成にif条件を使用できます。次の例では、16歳未満のすべての生徒を印刷します
$ awk ' BEGIN{ print "Student whose age are under 16 are:" } { if($3<16){ print $1 } }' student.txt
Forループ
次の例では、forループを使用して5つの乱数を連続して出力します。乱数を生成するために、システムに組み込まれた関数であるrand()関数を使用します。この関数は10進数で乱数を生成するため、100を掛けて1から100までの乱数を取得する必要があります。
$ awk 'BEGIN { for (i = 1; i <= 5; i++){ print int(100 * rand()) } }'
結論
この記事では、10個の素晴らしいawkコマンドとスクリプトについて学びました。この記事をよろしくお願いします。