ウェブサイト検索

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 }'

"/$username/ " – Awk コマンドでシェル変数 username の値を置換するために使用されるシェル引用符。 username の値は、ファイル /etc/passwd 内で検索されるパターンです。

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

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

chmod  +x  test.sh
./text.sh 

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

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

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

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

username="aaronkilik"

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

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

上記のコマンドの説明:

  1. -v – 変数を宣言するための Awk オプション
  2. username – シェル変数です。
  3. name – Awk 変数です。

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

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

結論

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

Awk シリーズの次のパートでは、Awk 機能のさらに別の重要なセクションであるフロー制御ステートメントについて詳しく説明します。引き続き注目して、学びと共有を続けていきましょう。