GNU/Linux >> Linux の 問題 >  >> Linux

4 Awk If ステートメントの例 ( if, if else, if else if, :? )

この記事は、進行中の Awk チュートリアル サンプル シリーズの一部です。以前の awk 記事では、awk print、awk ユーザー定義変数、awk 組み込み変数、および awk 演算子について説明しました。

この awk チュートリアルでは、awk 条件付き if ステートメントを確認しましょう。

awk は、プログラムの流れを制御するための多くの条件文をサポートしています。 Awk の条件ステートメントの構文のほとんどは、「C」プログラミング言語に似ています。

通常、条件ステートメントは、アクションを実行する前に条件をチェックします。条件が true の場合、アクションが実行されます。同様に、条件が false の場合にアクションを実行できます。

条件文は「if」というキーワードで始まります。 Awk は 2 種類の if ステートメントをサポートしています。

<オール>
  • Awk シンプルな If ステートメント
  • Awk If-Else ステートメント
  • Awk If-ElseIf-はしご
  • Awk シンプルな If ステートメント

    シングル アクション: 単純な If ステートメントを使用して条件をチェックし、条件が true を返す場合、対応するアクションを実行します。

    Syntax:
    if (conditional-expression)
    	action
    • キーワードの場合
    • 条件式 – 条件をチェックする式
    • action – アクションを実行する任意の awk ステートメント

    複数のアクション: 条件式が true を返す場合、アクションが実行されます。複数のアクションを実行する必要がある場合は、以下に示すようにアクションを中かっこで囲み、新しい行またはセミコロンで区切ります。

    Syntax:
    if (conditional-expression)
    {
    	action1;
    	action2;
    }

    条件が真の場合、中括弧で囲まれたすべてのアクションが指定された順序で実行されます。すべてのアクションが実行された後、次のステートメントを実行し続けます。

    Awk If Else ステートメント

    上記の単純な awk If ステートメントには、条件が false の場合の一連のアクションはありません。 awk If Else ステートメントでは、条件が false の場合に実行するアクションのリストを指定できます。条件が true を返す場合はアクション 1 が実行され、条件が false の場合はアクション 2 が実行されます。

    Syntax:
    if (conditional-expression)
    	action1
    else
    	action2

    Awk には条件演算子、つまり 三項演算子 もあります ( ?:) その機能は awk If Else ステートメントに似ています。条件式が真の場合はアクション 1 が実行され、条件式が偽の場合はアクション 2 が実行されます。

    Syntax:
    
    conditional-expression ? action1 : action2 ;

    Awk If Else If はしご

    if(conditional-expression1)
    	action1;
    else if(conditional-expression2)
    	action2;
    else if(conditional-expression3)
    	action3;
    	.
    	.
    else
    	action n;
    • 条件式 1 が真の場合、アクション 1 が実行されます。
    • 条件式 1 が偽の場合、条件式 2 がチェックされ、真の場合、アクション 2 が実行され、このように続きます。条件式が真でない場合、最後の else 部分が実行されます。

    それでは、生徒の採点を含むサンプル入力ファイルを作成しましょう。

    $cat student-marks
    Jones 2143 78 84 77
    Gondrol 2321 56 58 45
    RinRao 2122 38 37
    Edwin 2537 87 97 95
    Dayan 2415 30 47

    1. Awk If 例:すべてのマークが存在することを確認します

    $ awk '{
    if ($3 =="" || $4 == "" || $5 == "")
    	print "Some score for the student",$1,"is missing";'
    }' student-marks
    Some score for the student RinRao is missing
    Some score for the student Dayan is missing

    $3、$4、$5 は生徒のテストの点数です。テスト スコアが空の場合、メッセージがスローされます。 ||オペレーターは、マークのいずれかが存在しないことを確認し、警告する必要があります。

    2. Awk If Else の例:各科目の生徒の成績に基づいて合格/不合格レポートを生成する

    $ awk '{
    if ($3 >=35 && $4 >= 35 && $5 >= 35)
    	print $0,"=>","Pass";
    else
    	print $0,"=>","Fail";
    }' student-marks
    Jones 2143 78 84 77 => Pass
    Gondrol 2321 56 58 45 => Pass
    RinRao 2122 38 37 => Fail
    Edwin 2537 87 97 95 => Pass
    Dayan 2415 30 47 => Fail

    合格の条件は、すべてのテスト スコア マークが 35 以上であることです。したがって、すべてのテスト スコアが 35 より大きい場合にチェックされ、行全体と文字列「合格」が出力されます。テストのスコアが条件を満たさない場合、行全体が出力され、文字列「Fail」が出力されます。

    3. Awk If Else If 例:すべての生徒の平均と成績を求める

    $ cat grade.awk
    {
    total=$3+$4+$5;
    avg=total/3;
    if ( avg >= 90 ) grade="A";
    else if ( avg >= 80) grade ="B";
    else if (avg >= 70) grade ="C";
    else grade="D";
    
    print $0,"=>",grade;
    }
    $ awk -f grade.awk student-marks
    Jones 2143 78 84 77 => C
    Gondrol 2321 56 58 45 => D
    RinRao 2122 38 37 => D
    Edwin 2537 87 97 95 => A
    Dayan 2415 30 47 => D

    上記の awk スクリプトでは、「avg」という変数に 3 つのテスト スコアの平均が含まれています。平均が 90 以上の場合、グレードは A、平均が 80 以上の場合、グレードは B、平均が 70 以上の場合、グレードは C です。それ以外の場合、グレードは D です。

    4. Awk Ternary ( ?:) 例:入力の 3 行ごとにカンマで連結します。

    $ awk 'ORS=NR%3?",":"\n"' student-marks
    Jones 2143 78 84 77,Gondrol 2321 56 58 45,RinRao 2122 38 37
    Edwin 2537 87 97 95,Dayan 2415 30 47,

    前に awk ORS 組み込み変数について説明しました。この変数は、出力を取得するすべての行の後に追加されます。この例では、3 行ごとにコンマから改行に変更されます。 1、2 行目はコンマ、3 行目は改行、4、5 行目はコンマ、6 行目は改行などです。

    推奨読書

    <強い> 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 ユーティリティの機能に驚かれることでしょう。


    Linux
    1. 例を含む Bash If-Else ステートメント

    2. 5つの実用的な例で説明されたAWK配列

    3. 5 Bash Case ステートメントの例

    1. Bashスクリプトでifelse条件文を使用する方法

    2. Awk 入門チュートリアル – 7 つの Awk 印刷例

    3. Bash/sh 'if else' ステートメント

    1. Bash if elif elseステートメント:包括的なチュートリアル

    2. 4 Bash If ステートメントの例 ( If then fi, If then else fi, If elif else fi, Nested if )

    3. Linux での awk コマンドの例