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

7 つの強力な awk 演算子の例 (単項、2 項、算術、文字列、代入、条件付き、正規表現の awk 演算子)

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

他のプログラミング言語と同様に、Awk にも数値および文字列操作用の演算子が多数あります。この記事では、すべての主要な awk 演算子について説明します .

Awk には 2 種類の演算子があります。

<オール>
  • 単項演算子 – 単一のオペランドを受け入れる演算子は、単項演算子と呼ばれます。
  • 2 項演算子 – 複数のオペランドを受け入れる演算子は、2 項演算子と呼ばれます。
  • Awk 単項演算子

    演算子 説明
    + 数字を肯定する
    数字を否定
    ++ 自動インクリメント
    自動減分

    Awk バイナリ演算子

    Awk ではさまざまな種類の二項演算子を使用できます。用途に基づいて分類されています。

    Awk 算術演算子

    次の演算子は、算術計算の実行に使用されます。

    演算子 説明
    + 追加
    引き算
    * 掛け算
    / 部門
    % 剰余除算

    Awk 文字列演算子

    文字列連結用に、Awk には次の演算子があります。

    演算子 説明
    (スペース) 文字列連結

    awk 代入演算子

    Awk には、以下に示す代入演算子とショートカット代入演算子があります。

    演算子 説明
    = 課題
    += ショートカットの追加割り当て
    -= ショートカット減算割り当て
    *= ショートカット乗算の割り当て
    /= ショートカット部門の割り当て
    %= ショートカット モジュロ除算の割り当て

    Awk 条件演算子

    Awk には、次の記事で取り上げる制御構造とループ ステートメントで使用できる条件演算子の次のリストがあります。

    演算子 説明
    > より大きい
    >= 以上
    < 未満
    <= 以下
    <= 以下
    == 等しい
    != 等しくない
    && 両方の条件式が真であること
    || 条件式のいずれかが真であること

    Awk 正規表現演算子

    演算子 説明
    ~ 一致演算子
    !~ No Match 演算子

    awk オペレーターの例

    ここで、awk 演算子を使用するいくつかの例を見てみましょう。これらの例では、/etc/passwd を入力ファイルとして使用してみましょう。

    $ cat /etc/passwd
    gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
    libuuid:x:100:101::/var/lib/libuuid:/bin/sh
    syslog:x:101:102::/home/syslog:/bin/false
    hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false
    saned:x:110:116::/home/saned:/bin/false
    pulse:x:111:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false
    gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false

    Awk の例 1:ファイル内のフィールドの総数をカウントします。

    以下の awk スクリプトは、ショートカット加算代入演算子を使用して、すべての行に一致し、各行にフィールド数を追加し続けます。これまでに表示されたフィールドの数は、「total」という名前の変数に保持されます。入力が処理されると、特別なパターン「END {…}」が実行され、フィールドの総数が出力されます。

    $ awk -F ':' '{ total += NF }; END { print total }' /etc/passwd
    49

    Awk の例 2:/bin/sh シェルを使用しているユーザーの数をカウントする

    以下の awk スクリプトでは、パターン /bin/sh を含むすべての行の最後のフィールドに一致します。正規表現は //. の間で閉じる必要があります。そのため、すべてのフロントスラッシュ (/) を正規表現でエスケープする必要があります。行が変数「n」に一致すると、1 ずつインクリメントされます。 END セクションに「n」の値を出力しました。

    $ awk -F ':' '$NF ~ /\/bin\/sh/ { n++ }; END { print n }' /etc/passwd
    2

    Awk の例 3:最大のユーザー ID を持つユーザーの詳細を見つける

    以下の awk スクリプトは、変数「maxuid」のフィールドの最大数を追跡し、対応する行が変数「maxline」に格納されます。すべての行をループしたら、それらを出力します。

    $ awk -F ':'  '$3 > maxuid { maxuid=$3; maxline=$0 }; END { print maxuid, maxline }' /etc/passwd
    112 gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false

    Awk の例 4:偶数行を出力する

    以下の awk スクリプトは、各行を処理し、NR % 2 ==0、つまり NR が 2 の倍数であるかどうかをチェックします。行全体を出力するデフォルトの操作を実行します。

    $ awk 'NR % 2 == 0' /etc/passwd
    libuuid:x:100:101::/var/lib/libuuid:/bin/sh
    hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false
    pulse:x:111:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false

    Awk の例 5. 同じユーザー ID とグループ ID を持つすべての行を出力

    以下の awk スクリプトは、$3(USER ID) と $4(GROUP ID) が等しい場合にのみ行を出力します。入力の各行についてこの条件をチェックし、一致する場合は行全体を出力します。

    $awk -F ':' '$3==$4' passwd.txt
    gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh

    Awk の例 6:100 以上の USER ID を持ち、/bin/sh を使用する必要があるユーザーの詳細を出力する

    以下の Awk ステートメントには、2 つの条件式があり、1 つは User id($3) が 100 以上で、2 番目は最後のフィールドが /bin/sh と一致する必要があり、'&&' は上記の両方の場合にのみ出力されます。条件は真です。

    $ awk -F ':' '$3>=100 && $NF ~ /\/bin\/sh/' passwd.txt
    libuuid:x:100:101::/var/lib/libuuid:/bin/sh

    Awk の例 7:/etc/passwd ファイルにコメントがないユーザーの詳細を出力する

    以下の Awk スクリプトは、各行を読み取り、5 番目のフィールドが空であることを確認し、空の場合は行を出力します。

    $awk -F ':' '$5 == "" ' passwd.txt
    libuuid:x:100:101::/var/lib/libuuid:/bin/sh
    syslog:x:101:102::/home/syslog:/bin/false
    saned:x:110:116::/home/saned:/bin/false

    推奨読書

    <強い> 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. 強力なテキスト解析ツールであるawkの使用を開始する

    2. LinuxCプログラミングチュートリアルパート12-代入演算子と条件式

    3. Awk チュートリアル:3 つの実践例で Awk 変数を理解する

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

    2. 6 Bash 条件式の例 ( -e, -eq, -z, !=, [, [[ ..)

    3. Linux Objdump コマンドの例 (バイナリ ファイルの逆アセンブル)

    1. -eq:単項演算子が必要ですか?

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

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