Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

Awk の基本をマスター:7 つの必須の印刷コマンドを説明

Awk の基本をマスター:7 つの必須の印刷コマンドを説明

これは、新しい awk チュートリアル シリーズの最初の記事です。今後数週間で、awk のすべての機能を実用的な例とともにカバーする awk に関する記事をいくつか投稿する予定です。

この記事では、7 つの実用的な awk print 例とともに、基本的な awk 作業方法を確認してみましょう。

注: 以前の Sed チュートリアル シリーズを必ず確認してください。

Awk の導入と印刷操作

Awk は、構造化データの簡単な操作と書式設定されたレポートの生成を可能にするプログラミング言語です。 Awk は作成者の名前「A」を表します。 ほ、 アインバーガーとK アーニハン」

Awk は主にパターンのスキャンと処理に使用されます。 1 つ以上のファイルを検索して、指定されたパターンと一致する行が含まれているかどうかを確認し、関連するアクションを実行します。

Awk の主な機能の一部は次のとおりです。

  • Awk はテキスト ファイルをレコードとフィールドとして表示します。
  • 一般的なプログラミング言語と同様、Awk には変数、条件文、ループがあります
  • Awk には算術演算子と文字列演算子があります。
  • Awk はフォーマットされたレポートを生成できます

Awk はファイルまたはその標準入力から読み取り、標準出力に出力します。 Awk はテキスト以外のファイルには対応しません。

Syntax:
awk '/search pattern1/ {Actions}
 /search pattern2/ {Actions}' file

上記の awk 構文では:

  • 検索パターンは正規表現です。
  • アクション – 実行されるステートメント。
  • Awk ではいくつかのパターンとアクションが可能です。
  • file – 入力ファイル。
  • プログラムを一重引用符で囲んでいるのは、シェルが特殊文字を解釈しないようにするためです。

Awk の作業方法

<オル>
  • Awk は入力ファイルを一度に 1 行ずつ読み取ります。
  • 各行について、指定された順序で指定されたパターンと一致し、一致した場合は対応するアクションが実行されます。
  • 一致するパターンがない場合、アクションは実行されません。
  • 上記の構文では、検索パターンまたはアクションのいずれかはオプションですが、両方はオプションです。
  • 検索パターンが指定されていない場合、Awk は入力の各行に対して指定されたアクションを実行します。
  • アクションが指定されていない場合は、デフォルトのアクションである指定されたパターンに一致するすべての行を出力します。
  • アクションのない空の中括弧は何も行いません。デフォルトの印刷操作は実行されません。
  • アクション内の各ステートメントはセミコロンで区切る必要があります。
  • 次の内容を含むemployee.txtファイルを作成しましょう。このファイルは、
    例は後述します。

    $cat employee.txt
    100 Thomas Manager Sales $5,000
    200 Jason Developer Technology $5,500
    300 Sanjay Sysadmin Technology $7,000
    400 Nisha Manager Marketing $9,500
    500 Randy DBA Technology $6,000

    Awk の例 1. Awk のデフォルトの動作

    デフォルトでは、Awk はファイルのすべての行を出力します。

    $ awk '{print;}' employee.txt
    100 Thomas Manager Sales $5,000
    200 Jason Developer Technology $5,500
    300 Sanjay Sysadmin Technology $7,000
    400 Nisha Manager Marketing $9,500
    500 Randy DBA Technology $6,000

    上記の例ではパターンが指定されていません。したがって、アクションはすべての行に適用されます。
    引数を指定しないアクション print は、デフォルトで行全体を印刷します。したがって、すべてを印刷します
    ファイルの行は必ず実行されます。アクションは中括弧で囲む必要があります。

    Awk 例 2. パターンと一致する行を出力します。

    $ awk '/Thomas/
    > /Nisha/' employee.txt
    100 Thomas Manager Sales $5,000
    400 Nisha Manager Marketing $9,500

    上の例では、「Thomas」または「Nisha」に一致するすべての行が出力されます。 2つのパターンがあります。 Awk は任意の数のパターンを受け入れますが、各セット (パターンとそれに対応するアクション) は改行で区切る必要があります。

    Awk 例 3. 特定のフィールドのみを出力します。

    awk には多数の組み込み変数があります。レコードごと、つまり行ごとに、デフォルトで空白文字で区切られたレコードを分割し、それを $n 変数に格納します。行に 4 つのワードがある場合、$1、$2、$3、$4 に格納されます。 $0 は行全体を表します。 NF は、レコード内のフィールドの総数を表す組み込み変数です。

    $ awk '{print $2,$5;}' employee.txt
    Thomas $5,000
    Jason $5,500
    Sanjay $7,000
    Nisha $9,500
    Randy $6,000
    $ awk '{print $2,$NF;}' employee.txt
    Thomas $5,000
    Jason $5,500
    Sanjay $7,000
    Nisha $9,500
    Randy $6,000

    上記の例では、$2 と $5 はそれぞれ名前と給与を表します。 $NF を使用して給与を取得することもできます。$NF は最後のフィールドを表します。 print ステートメントの「,」は連結子です。

    Awk の例 4. 初期化と最終アクション

    Awk には、BEGIN と END というキーワードで指定される 2 つの重要なパターンがあります。

    Syntax: 
    BEGIN { Actions}
    {ACTION} # Action for everyline in a file
    END { Actions }
    # is for comments in Awk

    BEGIN セクションで指定されたアクションは、入力からの行の読み取りを開始する前に実行されます。
    END アクションは、入力からの行の読み取りと処理が完了した後に実行されます。

    $ awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";}
    > {print $2,"\t",$3,"\t",$4,"\t",$NF;}
    > END{print "Report Generated\n--------------";
    > }' employee.txt
    Name Designation Department Salary
    Thomas Manager Sales $5,000
    Jason Developer Technology $5,500
    Sanjay Sysadmin Technology $7,000
    Nisha Manager Marketing $9,500
    Randy DBA Technology $6,000
    Report Generated
    --------------

    上の例では、レポートの見出しと最後のファイルを印刷します。

    Awk 例 5. 従業員 ID が 200 より大きい従業員を検索する

    $ awk '$1 >200' employee.txt
    300 Sanjay Sysadmin Technology $7,000
    400 Nisha Manager Marketing $9,500
    500 Randy DBA Technology $6,000

    上の例では、最初のフィールド ($1) は従業員 ID です。したがって、$1 が 200 より大きい場合は、デフォルトの印刷アクションを実行して行全体を印刷します。

    Awk 例 6. テクノロジー部門の従業員のリストを印刷する

    部門名が 4 番目のフィールドとして使用できるようになりました。そのため、$4 が文字列「Technology」と一致するかどうかを確認する必要があります。一致する場合はその行を出力します。

    $ awk '$4 ~/Technology/' employee.txt
    200 Jason Developer Technology $5,500
    300 Sanjay Sysadmin Technology $7,000
    500 Randy DBA Technology $6,000

    演算子 ~ は正規表現と比較するためのものです。デフォルトのアクションと一致する場合、つまり行全体の印刷が実行されます。

    Awk の例 7. テクノロジー部門の従業員数を出力します

    以下の例では、部門がテクノロジーであるかどうかを確認し、テクノロジーである場合は、アクションでカウント変数をインクリメントします。この変数は、BEGIN セクションでゼロで初期化されています。

    $ awk 'BEGIN { count=0;}
    $4 ~ /Technology/ { count++; }
    END { print "Number of employees in Technology Dept =",count;}' employee.txt
    Number of employees in Tehcnology Dept = 3

    次に、プロセスの最後に、テクノロジー部門の従業員数を示す count の値を出力するだけです。

    推奨書籍

    Awk の基本をマスター:7 つの必須の印刷コマンドを説明 Sed と Awk 101 ハック、Ramesh Natarajan 著 。私は、UNIX/Linux 環境でテキスト ファイル (データ、構成ファイル、ログ ファイル) を扱うのに 1 日に数時間を費やしています。私はすべてのテキスト操作作業に Sed と Awk を使用しています。私の Sed と Awk の経験に基づいて、UNIX/Linux ライフを向上させる Sed と Awk のさまざまな高度な機能に関する 101 の実践例を含む、Sed and Awk 101 Hacks eBook を書きました。 Sed と Awk を数年間使用していてこの本を読んでいない場合でも、ぜひこの本を読んでください。 Sed および Awk ユーティリティの機能に驚かれることでしょう。

    追加の Awk 記事

    • Awk ユーザー定義変数と 3 つの実用的な例
    • 8 つの強力な Awk 組み込み変数 – FS、OFS、RS、ORS、NR、NF、FILENAME、FNR
    • 7 つの強力な Awk 演算子の例 (単項、バイナリ、算術、文字列、代入、条件、正規表現の Awk 演算子)
    • 4 つの Awk If ステートメントの例 ( if、if else、if else if、:? )
    • ループに巻き込まれましたか? Awk While、Do While、For ループ、Break、Continue、Exit の例

    1. rbash –実用的な例で説明された制限付きBashシェル

      Linuxシェル 最も魅力的で強力なGNUの1つです / Linux 電動工具。 Xを含むすべてのアプリケーション はシェル上に構築されており、Linuxシェルは非常に強力であるため、それを使用してLinuxシステム全体を正確に制御できます。 Linuxシェルのもう1つの側面は、システムコマンドを実行すると、その結果を知らずに、または無意識のうちに、潜在的に有害になる可能性があることです。 無知なユーザーであること。この目的のために、制限付きシェルを導入しています。制限付きシェルの詳細、実装されている制限などについて説明します。 rbashとは何ですか? 制限付きシェル は、b

    2. CentOS/RHELでBashオートコンプリートをインストールして有効にする方法

      バッシュ (ボーンアゲインシェル )は間違いなく最も人気のあるLinuxシェルであり、多くのLinuxディストリビューションのデフォルトシェルであることは不思議ではありません。その最も魅力的な機能の1つは、組み込みの「オートコンプリート」です。 」サポート。 TABと呼ばれることもあります 完了、この機能を使用すると、コマンド構造を簡単に完了することができます。コマンドの一部を入力してから、[タブ]を押すことができます。 コマンドとその引数をオートコンプリートするためのキー。可能な場合は、複数の完了がすべて一覧表示されます。 バッシュと同じように 、ほぼすべての最新のLinuxシェルには