ウェブサイト検索

Awk での If Else ステートメントの使用


AWK での条件ステートメントの使用方法を学びます。 if else を使用すると、高度な AWK スクリプトを作成できます。

AWK は、bash シェルに組み込まれている強力なスクリプト言語です。

これは非常に多用途であり、あらゆる種類のデータ抽出スクリプトの作成に使用できます。

条件文はあらゆるプログラミング言語またはスクリプト言語に不可欠な部分であり、AWK も例外ではありません。

このチュートリアルでは、AWK での if-else ステートメントの使用例を示します。以下に、例の基礎となるサンプル データを示します。

ID Name Age Subject
111 Farhaan 18 DevOps
89 Alex 21 SecOps
92 Ronn 22 IT
100 Robert 23 Commerce
102 Samantha 20 Cloud-Admin
105 Bob 21 Maths

それを students.txt に保存します。サンプルを自分で試してみたい場合は、ダウンロードできます。

1. Awk の if ステートメント

if ステートメントは、条件が true か false かをチェックします。条件が true の場合、ステートメントが実行されます。

awk の if ステートメントの簡単な構文は次のとおりです。

awk '{if (condition) {statement} }' [input_file]

ここで、students.txt ファイルのサンプル データを使用し、AWK の if 条件を使用して ID 100 の学生の詳細を出力してみましょう。

awk '{                                        

if ($1=="100")

  {
    print "............... \n";
    print "Name : " ,$2;
    print "Age : ",$3;
    print "Department : " ,$4;
  }
  
}' students.txt

上記の awk コマンドの実行は次のとおりです。

上記のコマンド全体を次のように 1 つの文で記述することもできます。

awk '{ if ($1=="100")  { print "............... \n"; print "Name : " ,$2; print "Age : ",$3; print "Department : " ,$4; } }' students.txt

しかし、最初の方が読みやすく理解しやすいです。

2. Awk の if else ステートメント

前の例では、条件とアクションが 1 つだけありました。 if else ステートメントは、if ステートメントとは少し異なります。

awk の if else ステートメントの一般的な形式は次のとおりです。

awk '{
  if (condition) 
    {command1} 
  else 
    {command2}
}' [input_file]

ここで、条件が true の場合は command1 が実行され、条件が false の場合は else 部分の command2 が実行されます。

もう一度 student.txt データ ファイルを見てみましょう。

年齢が 20 歳以下のすべての学生の名前と所属学部を取得するとします。

AWK コマンドは次のようになります。

awk '{

if ($3<20)
  {
    print "Student "$2,"of department", $4, "is less than 20 years old"
  } 
else
  {
    print "Student "$2,"of department", $4, "is more than 20 years old"
  }

if else の例の実行と出力は次のとおりです。

ご覧のとおり、20 歳未満の学生は 2 人だけです。残りの学生は20歳以上です。

しかし、上の例には問題があります。また、テーブルの記述を実際のデータとみなして、学生の名前、年齢、年齢が 20 歳以上であることを示します。

これを if else-if ステートメントで修正しましょう。

3. Awk の if else-if ステートメント

if else if ステートメントを使用すると、awk コマンドは複数の条件をチェックします。

最初の条件が false の場合は、2 番目の条件がチェックされます。 2 番目の条件も false の場合は、3 番目の条件もチェックします。いずれかの条件が true になるまで、すべての条件がチェックされます。どの条件も満たされない場合は、else 部分が実行されます。

if(condition1){

command1

}

else if(condition2) {

command2

}

else if(condition3) {

command3

}

.

.

.

else{

commandN

}

前の例では、出力では単なる説明であるデータの最初の行も考慮されます。

年齢が数値であるかどうかを確認する条件を付けてみましょう。数値を意味する正規表現 /[0-9]+$/ を使用しています。 ~ は引数に数字があることを意味します。それらの前の否定演算子は、フィールドに数値を含めないことを意味します。

awk '{

if (! ($3 ~ /[0-9]+$/))
  {
    print "Age is just a number but you do not have a number"
  } 
else if ($3<20)
  {
    print "Student "$2,"of department", $4, "is less than 20 years old"
  } 
else
  {
    print "Student "$2,"of department", $4, "is more than 20 years old"
  }

}' students.txt

これを実行して、出力の最初の行に注目してみましょう。

ボーナスヒント: awk プログラム ファイルを使用する

ターミナルに長い awk プログラムを直接記述するのが面倒な場合は、awk ファイルを使用してください。

新しいファイルを作成し、example.awk または任意の名前を付けます。ここでは拡張子は関係ありません。ファイルが awk プログラム ファイルであることを理解しやすくするだけです。

上記の例では、awk の直後にある '' の間にコンテンツを配置します。

{
if (! ($3 ~ /[0-9]+$/))
  {
    print "Age is just a number but you do not have a number"
  } 
else if ($3<20)
  {
    print "Student "$2,"of department", $4, "is less than 20 years old"
  } 
else
  {
    print "Student "$2,"of department", $4, "is more than 20 years old"
  }
  
}

次に、この awk ファイルを次の方法で使用します。

awk -f example.awk students.txt

前に見たものと同じ出力が生成されます。

その他のボーナス ヒント: 代わりに三項演算子を使用してください

awk で if else ステートメントを使用する代わりに、三項演算子を使用することもできます。 3 項式は、Awk の if-else ステートメントの短縮版です。

条件が true の場合、command1 が実行されます。それ以外の場合、条件が false の場合は command2 が実行されます。

(condition) ? Command1:Command2

次の awk コマンドの例を考えてみましょう。

awk '{print ($3 <=20)? "Age less than 20: " $2: "Age over 20: " $2}' students.txt

この例では、$3Age フィールドを参照します。年齢が 20 歳以下の場合は、「年齢は 20 歳未満です」と表示される最初のコマンドが出力されます。最初の部分が False の場合、2 番目のコマンド「Age is over 20」が実行されます。

abhishek@LHB:~$ awk '{print ($3 <=20)? "Age less than 20: " $2: "Age over 20: " $2}' students.txt
Age over 20: Name
Age less than 20: Farhaan
Age over 20: Alex
Age over 20: Ronn
Age over 20: Robert
Age less than 20: Samantha
Age over 20: Bob

結論

このガイドでは、AWK プログラミング言語で if-else ステートメントを使用するさまざまな方法を学習しました。これらのステートメントを使用すると、プログラムのフローの制御、条件の評価、ファイルからのデータの抽出などを行うことができます。

さらにいくつかの例が必要な場合は、この記事が役に立ちます。