これは、新しい awk チュートリアル シリーズの最初の記事です。今後数週間で、awk のすべての機能を実用的な例とともにカバーする awk に関するいくつかの記事を投稿する予定です。
この記事では、基本的な awk の作業方法論と、7 つの実用的な awk print の例を確認します。
注: 以前の Sed チュートリアル シリーズを必ずお読みください。
Awk の紹介と印刷操作
Awk は、構造化されたデータを簡単に操作し、書式設定されたレポートを生成できるプログラミング言語です。 awk は、その作成者の名前「A」の略です ほら、W アインバーガー、K アーニハン」
Awk は主にパターンのスキャンと処理に使用されます。 1 つ以上のファイルを検索して、指定されたパターンに一致する行が含まれているかどうかを確認し、関連するアクションを実行します。
Awk の主な機能は次のとおりです。
- Awk はテキスト ファイルをレコードとフィールドとして表示します。
- 一般的なプログラミング言語と同様に、Awk には変数、条件、およびループがあります
- Awk には算術演算子と文字列演算子があります
- Awk は書式設定されたレポートを生成できます
awk は、ファイルまたは標準入力から読み取り、標準出力に出力します。 awk は、テキスト以外のファイルには対応していません。
Syntax: awk '/search pattern1/ {Actions} /search pattern2/ {Actions}' file
上記の awk 構文では:
- 検索パターンは正規表現です。
- アクション – 実行するステートメント
- Awk ではいくつかのパターンとアクションが可能です。
- file – 入力ファイル。
- プログラムを一重引用符で囲むのは、シェルが特殊文字を解釈しないようにするためです。
Awk 作業方法論
<オール>
次の内容の employee.txt ファイルを作成してみましょう。これは、
後述の例で使用されます。
$cat employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
Awk の例 1. Awk のデフォルトの動作
デフォルトでは、Awk はファイルのすべての行を出力します。
$ awk '{print;}' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
上記の例では、パターンは指定されていません。したがって、アクションはすべての行に適用できます。
引数を指定しないアクション print は、デフォルトで行全体を出力します。したがって、
ファイルのすべての行が失敗せずに出力されます。アクションは中括弧で囲む必要があります。
Awk の例 2. パターンに一致する行を出力します。
$ awk '/Thomas/ > /Nisha/' employee.txt 100 Thomas Manager Sales $5,000 400 Nisha Manager Marketing $9,500
上記の例では、「Thomas」または「Nisha」に一致するすべての行が出力されます。それには2つのパターンがあります。 Awk は任意の数のパターンを受け入れますが、各セット (パターンとそれに対応するアクション) は改行で区切る必要があります。
Awk の例 3. 特定のフィールドのみを出力
Awk には多数の組み込み変数があります。各レコード、つまり行ごとに、デフォルトで空白文字で区切られたレコードを分割し、$n 変数に格納します。行に 4 つの単語がある場合、$1、$2、$3、および $4 に格納されます。 $0 は行全体を表します。 NF は、レコード内のフィールドの総数を表す組み込み変数です。
$ awk '{print $2,$5;}' employee.txt Thomas $5,000 Jason $5,500 Sanjay $7,000 Nisha $9,500 Randy $6,000 $ awk '{print $2,$NF;}' employee.txt Thomas $5,000 Jason $5,500 Sanjay $7,000 Nisha $9,500 Randy $6,000
上記の例では、$2 と $5 はそれぞれ Name と Salary を表します。 $NF を使用して給与を取得することもできます。ここで、$NF は最後のフィールドを表します。 print ステートメントの「,」は連結子です。
Awk の例 4. 初期化と最終アクション
Awk には、BEGIN と END というキーワードで指定される 2 つの重要なパターンがあります。
Syntax: BEGIN { Actions} {ACTION} # Action for everyline in a file END { Actions } # is for comments in Awk
BEGIN セクションで指定されたアクションは、入力からの行の読み取りを開始する前に実行されます。
END アクションは、入力からの行の読み取りと処理が完了した後に実行されます。
$ awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";} > {print $2,"\t",$3,"\t",$4,"\t",$NF;} > END{print "Report Generated\n--------------"; > }' employee.txt Name Designation Department Salary Thomas Manager Sales $5,000 Jason Developer Technology $5,500 Sanjay Sysadmin Technology $7,000 Nisha Manager Marketing $9,500 Randy DBA Technology $6,000 Report Generated --------------
上記の例では、レポートの見出しと最後のファイルを出力します。
Awk の例 5. 従業員 ID が 200 より大きい従業員を検索する
$ awk '$1 >200' employee.txt 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
上記の例では、最初のフィールド ($1) は従業員 ID です。したがって、$1 が 200 より大きい場合は、デフォルトの印刷アクションを実行して行全体を印刷します。
Awk の例 6. 技術部門の従業員のリストを出力する
部門名が 4 番目のフィールドとして利用できるようになったので、$4 が文字列「Technology」と一致するかどうかを確認する必要があります。一致する場合は、その行を出力してください。
$ awk '$4 ~/Technology/' employee.txt 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 500 Randy DBA Technology $6,000
演算子 ~ は正規表現と比較するためのものです。デフォルトのアクションと一致する場合、つまり行全体の印刷が実行されます。
Awk の例 7. 技術部門の従業員数を表示
以下の例では、部門がテクノロジーであるかどうかを確認し、そうである場合はアクションで、BEGIN セクションでゼロで初期化されたカウント変数をインクリメントします。
$ awk 'BEGIN { count=0;} $4 ~ /Technology/ { count++; } END { print "Number of employees in Technology Dept =",count;}' employee.txt Number of employees in Tehcnology Dept = 3
次に、プロセスの最後に、技術部門の従業員数を示す count の値を出力します。
推奨読書
<強い> Ramesh Natarajan による Sed と Awk の 101 ハック .テキスト ファイル (データ、構成、およびログ ファイル) を扱う UNIX/Linux 環境で、1 日に数時間を費やしています。私はすべてのテキスト操作作業に Sed と Awk を使用しています。私の Sed と Awk の経験に基づいて、Sed と Awk のさまざまな高度な機能に関する 101 の実用的な例を含む Sed and Awk 101 Hacks eBook を書きました。これにより、UNIX/Linux の生活が向上します。 Sed と Awk を数年間使用しており、この本を読んでいない場合でも、ぜひこの本を読んでください。 Sed および Awk ユーティリティの機能に驚かれることでしょう。
追加の awk 記事
- 3 つの実用例を含む Awk ユーザー定義変数
- 8 つの強力な Awk 組み込み変数 – FS、OFS、RS、ORS、NR、NF、FILENAME、FNR
- 7 つの強力な Awk 演算子の例 (単項、二項、算術、文字列、代入、条件付き、正規表現の Awk 演算子)
- 4 つの Awk If ステートメントの例 (if、if else、if else if、:?)
- ループに巻き込まれましたか? Awk While、Do While、For Loop、Break、Continue、Exit の例