Awkがシェル変数を使用できるようにする方法-パート11


シェルスクリプトを作成するときは、通常、Awk操作などの他の小さなプログラムやコマンドをスクリプトに含めます。 Awkの場合、シェルからAwk操作にいくつかの値を渡す方法を見つける必要があります。

これは、Awkコマンド内でシェル変数を使用することで実行できます。シリーズのこのパートでは、Awkコマンドに渡す値を含む可能性のあるシェル変数をAwkが使用できるようにする方法を学習します。

Awkがシェル変数を使用できるようにする方法はおそらく2つあります。

1.シェル引用の使用

例を見て、実際にシェル引用を使用してAwkコマンドのシェル変数の値を置き換える方法を説明しましょう。この例では、ファイル/ etc/passwdでユーザー名を検索し、ユーザーのアカウント情報をフィルタリングして出力します。

したがって、次の内容で test.sh スクリプトを記述できます。

#!/bin/bash

#read user input
read -p "Please enter username:" username

#search for username in /etc/passwd file and print details on the screen
cat /etc/passwd | awk "/$username/ "' { print $0 }'

その後、ファイルを保存して終了します。

上記の test.sh スクリプトのAwkコマンドの解釈:

cat /etc/passwd | awk "/$username/ "' { print $0 }'

<コード> //

二重引用符はAwkスクリプト ‘{print sh}’ の外側にあることに注意してください。

次に、スクリプトを実行可能にして、次のように実行します。

$ chmod  +x  test.sh
$ ./text.sh 

スクリプトの実行後、ユーザー名を入力し、有効なユーザー名を入力してEnterキーを押すように求められます。以下のように、/ etc/passwdファイルからユーザーのアカウントの詳細を表示します。

2.Awkの変数割り当ての使用

この方法は、上記の方法に比べてはるかに簡単で優れています。上記の例を考慮すると、簡単なコマンドを実行してジョブを実行できます。このメソッドでは、 -v オプションを使用して、シェル変数をAwk変数に割り当てます。

まず、シェル変数 username を作成し、/etc/passswd ファイルで検索する名前を割り当てます。

username="aaronkilik"

次に、以下のコマンドを入力して、Enterキーを押します。

# cat /etc/passwd | awk -v name="$username" ' $0 ~ name {print $0}'

上記のコマンドの説明:

  1. -v – Awk option to declare a variable
  2. username – is the shell variable
  3. name – is the Awk variable

Awkスクリプト内の sh〜name を注意深く見てみましょう。 'sh〜name {print sh}' です。このシリーズのパート4でAwk比較演算子について説明したとき、比較演算子の1つは値パターンでした。つまり、値がパターンと一致する場合はtrueです。

Awkにパイプされたcatコマンドの output(sh)は、/ etc/passwdで検索している名前であるパターン(aaronkilik)と一致します。その結果、比較操作は真です。次に、ユーザーのアカウント情報を含む行が画面に印刷されます。

結論

Awkコマンド内でシェル変数を使用するのに役立つAwk機能の重要なセクションについて説明しました。多くの場合、シェルスクリプト内で小さなAwkプログラムまたはコマンドを作成するため、Awkコマンド内でシェル変数を使用する方法を明確に理解する必要があります。

Awkシリーズの次のパートでは、Awk機能のさらに別のクリティカルセクションであるフロー制御ステートメントについて詳しく説明します。引き続きご期待ください。学習と共有を続けましょう。