1. ホーム
  2. スクリプト・コラム
  3. リナックスシェル

シェルでのawk printの使い方を解説します

2022-02-08 06:34:49

まず、awk がどのように動作するかを理解する必要があります。
1. AWKは入力ファイルを一度に1行ずつ読み込みます。
2. 各行に対して、与えられた順序パターンでマッチングし、マッチした場合、対応するアクションを実行する。
3. パターンにマッチしない場合は、任意のアクションが実行されます。
4. 上記の構文では、検索パターン、またはアクションのどちらかは任意ですが、両方は任意ではありません。
5. 検索パターンが与えられない場合、awk は与えられたアクションが入力された各行を実行しなければなりません。
6. もしアクションが与えられなかったら、print。これは、パターンにマッチしたすべての行に対するデフォルトのアクションです。7. 空白のままのアクションブラケットには何もしません。これは、デフォルトのprintアクションを実行しません。
8. の各アクションの宣言は、セミコロンで区切る必要があります。でemployee.txtを作成してみましょう。

まず、awk がどのように動作するかを理解する必要があります。

1. AWKは入力ファイルを一度に1行ずつ読みます。
2. 各行に対して、与えられた順序パターンでマッチングし、マッチした場合、対応するアクションを実行する。
3. パターンにマッチしない場合は、任意のアクションが実行されます。
4. 上記の構文では、検索パターン、またはアクションのどちらかは任意ですが、両方は任意ではありません。
5. 検索パターンが与えられない場合、awk は与えられたアクションが入力された各行を実行しなければなりません。
6.アクションが与えられない場合、パターンに一致するすべての行でデフォルトのアクションであるprintを実行します。
7. アクションブラケットをすべて空にしても、何も起こりません。デフォルトの印刷アクションを実行しません。
8. の各アクションの宣言は、セミコロンで区切る必要があります。

次のような内容の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 はファイルの各行を表示します。

1234567
$ 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

上の例のスキーマでは指定されていない。したがって、すべての行に適用される。
アクションで引数を指定すると、デフォルトで行全体が出力されます。

Awkの例2.は、パターンにマッチした行を表示します。

1234$ awk '/Thomas/

> /Nisha/' employee.txt
100 Thomas Manager Sales $5,000
400 Nisha Manager Marketing $9,500

上記の例では、"Thomas" または "Nisha"にマッチするすべての行を表示しています。これは2つのパターンを持っています。

Awkの例3.は、特定のフィールドのみを表示します。

awk には組み込みの変数があります。各レコード、つまり行ごとに、デフォルトでは空白文字で区切られたレコードが $ n 個の変数に格納されます。もし行に 4 つの単語があれば、$ 1 に格納されます。 <セマンティクス 2 <ミ 0は1行全体を表します。NFは、この行にいくつの区切りフィールドがあるかを表す組み込み変数です。

12345678910111213$ 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

Awkの例4.初期化および最終動作

BEGINとENDというキーワードで識別されるAwkの2つの重要なパターン

構文

BEGIN { Actions}
{ACTION} # ファイル内のエブリラインに対するアクション
END { Actions }.

#はAwkのコメント用

の例です。

12345678910111213
$ awk 'BEGIN {print "NametDesignationTepartmentTepartmentSalary";}.

> {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の例6.は、技術部門の従業員のリストを印刷します。

部署名が4番目のフィールドになったので、"Techology" で文字列をチェックし、$4が一致したら、この行を出力します。
$ awk '$4 ~/Technology/' employee.txt
200 ジェイソン・デベロッパー・テクノロジー $5,500
300 サンジェイ シスアド テクノロジー $7,000
500 ランディ DBA テクノロジー $6,000

演算子 ~ は正規表現の比較です。マッチした場合、デフォルトの動作は行全体を表示することです。

Awkの例7.は、技術部の社員数を表示します。

次の例では、部門がTechnologyであるかどうかをチェックし、TechnologyであればActionで変数のカウントだけをインクリメントしています。この変数は、BEGINで0に初期化されます。

123456

$ 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

この変数をENDでプリントアウトしてください。これは技術部門の社員数です

まとめる

シェルでのawk printの使い方についての記事です。シェルでの awk print の使い方については、スクリプトハウスの過去記事を検索するか、引き続き以下の関連記事を閲覧してください。