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 の作業方法
<オル>
次の内容を含む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 の値を出力するだけです。
推奨書籍
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 の例
-
rbash –実用的な例で説明された制限付きBashシェル
Linuxシェル 最も魅力的で強力なGNUの1つです / Linux 電動工具。 Xを含むすべてのアプリケーション はシェル上に構築されており、Linuxシェルは非常に強力であるため、それを使用してLinuxシステム全体を正確に制御できます。 Linuxシェルのもう1つの側面は、システムコマンドを実行すると、その結果を知らずに、または無意識のうちに、潜在的に有害になる可能性があることです。 無知なユーザーであること。この目的のために、制限付きシェルを導入しています。制限付きシェルの詳細、実装されている制限などについて説明します。 rbashとは何ですか? 制限付きシェル は、b
-
CentOS/RHELでBashオートコンプリートをインストールして有効にする方法
バッシュ (ボーンアゲインシェル )は間違いなく最も人気のあるLinuxシェルであり、多くのLinuxディストリビューションのデフォルトシェルであることは不思議ではありません。その最も魅力的な機能の1つは、組み込みの「オートコンプリート」です。 」サポート。 TABと呼ばれることもあります 完了、この機能を使用すると、コマンド構造を簡単に完了することができます。コマンドの一部を入力してから、[タブ]を押すことができます。 コマンドとその引数をオートコンプリートするためのキー。可能な場合は、複数の完了がすべて一覧表示されます。 バッシュと同じように 、ほぼすべての最新のLinuxシェルには