Linuxの高度な簡潔-awk
簡単な紹介
awkは、見つけるために、grepをする相対的な、強力なテキスト分析ツールで編集し、そのデータ解析でのawk、sedののとレポート生成、特に強いです。AWKは単に、デフォルトの区切りスペースとして、スライスの各列を行毎にファイルを読み取り、その後、様々な評価を部分を切断することです。
AWKの3つのバージョンが存在する:AWK、nawkのとgawkの、特に記載されていないが、一般的にgawkはGNU AWKのバージョンである、gawkは指します。
その創始者アルフレッド・エイホ、ピーター・ワインバーガー、そしてブライアン・カーニハン姓の最初の文字から派生し、その名前をawkに。AWKは、実際には独自の言語を持っているん:AWKプログラミング言語を、3人の創設者は、それが正式として定義されている「風のスキャンおよび処理言語。」それはあなたが入力ファイルを読んで短いプログラムを作成することができ、データをソートし、プロセスデータ、入力に対して計算を実行し、レポートだけでなく、無数の他の関数を生成します。
使用
AWK '{パターン+アクション} {ファイル名}
操作が複雑であることができるが、構文は常にパターンはAWKデータ内で検索内容を表す場合であり、マッチが実行見つかった場合、アクションは、一連のコマンドであるが。中括弧({})は、常にプログラムにおいて、それらはグループに特定のパターンに従った一連の命令を使用している表示される必要はありません。パターンは、スラッシュ記号で表すことに正式です。
awk言語の最も基本的な機能は、文書または文字列で指定して情報を抽出する、他のテキスト操作を行うために情報を抽出するためにawkのブラウザベースのルールです。完全なawkスクリプトは、多くの場合、フォーマットされたテキストファイルに情報を使用されています。
通常、awkは処理ユニットを動作ファイルです。AWK文書の各行は、受信された、テキストを処理するために第1のコマンドを実行します。
コールAWK
AWKを呼び出すには、3つの方法があります。
1.コマンドライン
AWK [-Fフィールドセパレータ]「コマンド」入力ファイル(複数可)
[ - Fのフィールド区切り文字]はオプションであり、コマンドは本当にコマンドは、awkはされています。入力ファイル(複数可)は、処理対象のファイルです。
AWKでは、それぞれについてフィールドセパレータによって分離された各ラインファイルは、ドメインと呼ばれます。典型的には、名前-Fフィールドデリミタ場合に、デフォルトのフィールド区切り文字はスペースです。
2.shellスクリプト
awkコマンドはすべて、スクリプトの名前を入力することによって、ファイル、および実行可能なプログラムのawk、awkコマンド・インタープリタと、スクリプトの最初の行として、再び呼び出さを挿入します。
シェルスクリプトと同等の最初の行:!#/ビン/ SH
#/ binに/ awkは:に置き換えることができます!
3.すべてのawkコマンドを呼び出して別のファイルを挿入し、します:
AWK -f AWKスクリプト・ファイル入力ファイル(複数可)
これは、上記で、入力ファイル(複数可)で、スクリプトのawkのawkスクリプト・ファイルをロードするには、-fオプションは同じです。
この章では、コマンドラインに焦点を当てています。
スターター例
-------------------------------------------------- -------------------------------------------------- ------------
1、のみ削除最初の5行:以下の出力との最後の-n 5
[ルート@ WWWの〜]#最後-n 5
ルートPTS / 1 192.168.1.100火2月10日11時21分まだログイン
ルートPTS / 1 192.168.1.100火2月10日午後12時46 - 2:28(1時41分)
ルートPTS / 1 192.168.1.100月2月9日11時41分 - 午後06時30(6時48分)
11時41分にdmtsai PTS / 1 192.168.1.100月2月9日11時41分(午前0時)
ルートTTY1金9月5日14時09分 - 14時10分(午後12時01)
2つのディスプレイ直近5つのアカウントのログイン
-n 5 #last | awkは '{$ 1印刷します}'
ルート
ルート
ルート
dmtsai
ルート
レコード改行がある読み取りはフィルインフィールド、「\ n」を分離した後、ドメインに指定したフィールドの区切り文字に記録、:awkのワークフローがあるようである$ 0はすべてのドメインを示し、$ 1は最初のフィールドを表し、$ nがn番目のフィールドを表します。デフォルトのフィールド区切り文字は、「キーブランク」または「[タブ]ボタン」で、ユーザーはように$ 1、$ 3は、ログインユーザIPを表し、を表して記録されます。
3、ディスプレイ/ etc / passwdファイルのアカウント
#cat / etc / passwdファイル| awkの-F ':' '' {$ 1}印刷
ルート
デーモン
置き場
SYS
これは、各ラインは、{$ 1印刷}アクションが実行され、AWK +アクションの一例です。-F指定したフィールドセパレータがあります「:」。
図4に示すように、表示/ etc / passwdファイルのアカウントおよびアカウント対応するシェル、シェル分割タブの口座間
#cat / etc / passwdファイル| awkの-F ':' '{$ 1印刷 "\トン" $ 7}'
ルート/ binに/ bashの
デーモン/ binに/ shを
ビン/ binに/ shを
SYS / binに/ shを
6、ディスプレイ/ etc / passwdファイルのアカウントとアカウント、シェルを対応するシェルと、カンマ区切りの口座間の、そして最後の行に「青、/ binに/間食」を追加し、名前のライン、シェル内のすべての列名を追加します。
猫/ etc / passwdファイル| awkの-F ':' 'BEGIN {印刷 "名、シェル"} {$ 1" 印刷、 "$ 7} END {印刷 "青、/ binに/間食"}'
名前、シェル
ルート、/ binに/ bashの
デーモン、/ binに/ shを
ビン、/ binに/ shを
SYS、/ binに/ shを
....
ブルー、/ binに/間食
:この場合、awkのワークフローがあるようである最初に実行し、ファイルを読み込み、begingすべての$ 0の場合、ドメインに/ nの改行文字のセグメンテーションと指定したフィールドの区切り文字のレコードを持つレコードを読んで、ドメインが満たされていますドメイン、$ 1は、第1フィールドを表し、$ nは、n番目のフィールドを示し、そして次に動作に対応する動作モードを開始します。そして、第二の記録......すべてのレコードが読み取られるまで、読み込みを開始し、最終的に終了操作を。
7、検索/ etc / passwdファイルのルートラインはすべてのキーワードを持っています
#awk -F: '/ルート/' / etc / passwdファイル
ルート:X:0:0:ルート:/ルート:/ binに/ bashの
このパターンを用いた例であり、パターンマッチング(ここでルート)行がアクションを実行する(アクションが指定されていない場合、デフォルトの出力各行の内容)。
検索は、ルートで始まるを見つけるために、例えば、定期的にサポートしています。
awkの-F: '/ ^ルート/' / etc / passwdファイル
図8に示すように、検索/ etc / passwdファイルルート線は、すべてのキーワードを有し、対応するシェルを表示します
#1のawk -F: '/ルート/ {$ 7印刷}' / etc / passwdファイル
/ binに/ bashの
これは、{$ 7印刷}アクションを指定します
awkは組み込み変数
-------------------------------------------------- -------------------------------------------------- -----------
awkは、これらの変数を変更することができる変数を設定するために使用される多くの建築環境情報を持っている、最も一般的な変数のいくつかは以下のとおりです。
コマンドラインの数は、ARGCパラメータ
コマンドライン引数はARGVに配置します
ENVIRONは、キューシステム環境変数の使用をサポート
FILENAMEのawkはファイル名を参照します
FNRのレコード数は、ファイルを閲覧します
コマンドラインオプションに相当し、入力フィールドセパレータを設定FS -F
ドメインNF閲覧履歴の数
レコードのNRの数が読み込まれました
OFS出力フィールドセパレータ
ORS出力レコードセパレータ
RSは、レコード区切り文字を制御します
再び、変数$ 0 $ 1 $ 2は、現在の行の2番目のフィールドを表し、現在の行の最初のフィールドを表し、レコード全体を指し、......というように。
1、統計/ etc / passwdファイル:ファイル名、行あたりの行数、行あたりの列の数、完全なラインに対応します。
#awk -F ':' '{印刷 "ファイル名:" FILENAME "行番号" NR "カラム:" NF "linecontent:" $ 0}' / etc / passwdファイル
ファイル名:/ etc / passwdファイル、行番号:1、列:7、linecontent:ルート:x:0:0:ルート:/ルート:/ binに/ bashの
ファイル名:/ etc / passwdファイル、行番号:2、列:7、linecontent:デーモン:X:1:1:デーモン:は/ usr / sbinに:/ binに/ SH
ファイル名:/ etc / passwdファイル、行番号3、列:7、linecontent:ビンX:2:2:ビン:/ binに:/ binに/ SH
ファイル名:/ etc / passwdファイル、行番号:4、カラム:7、linecontent:SYS:X:3:3:SYS:/ DEV:/ binに/ SH
図2は、printfの印刷を置き換える使用して、あなたは、コードをより簡潔に読みやすくすることができます
AWK -F ':' '{のprintf( "ファイル名:%の10S、行番号:%sは、列:%sは、linecontent:%Sの\ n"、FILENAME、NR、NF、$ 0)}' / etc / passwdファイル
印刷とprintfの
awkは、印刷やprintfの機能2プリント出力の両方を提供します。
パラメータは、可変印刷機能、数値または文字列かもしれません。文字列は、カンマで区切られた、二重引用符で囲む必要があります。コンマがない場合、パラメータは、直列に区別することはできません。ここでは、カンマ区切りファイルの役割と出力の役割は同じですが、後者は唯一のスペースです。
printf関数は、実質的に同様のその使用とC言語のprintfは、文字列にフォーマットすることができるのprintf使いやすく、出力複合体を、より理解しやすいコード。
awkのプログラミング
-------------------------------------------------- -------------------------------------------------- ------------------------
変数と代入
組み込み変数は、awkのに加えて、awkはまた、変数をカスタマイズすることができます。
1、統計情報は/ etc / passwdの口座番号
awkの{++を数える; $ 0印刷;} END {プリント "は、ユーザー数がある"、カウント} '/ etc / passwdファイル
ルート:X:0:0:ルート:/ルート:/ binに/ bashの
......
利用者数は40です
カウントは、カスタム変数です。数分離;アクション{}一つだけのプリントがある前に、実際には、単にアクション{}に複数のステートメントを持つことが、文を印刷します。
デフォルトでは、適切なアプローチが0に初期化され、0であるが、何の初期数は、ありません。
AWK 'BEGIN {カウント= 0;印刷 "[開始]ユーザカウントである" カウント} {+ 1カウント=カウント; $ 0印刷;} { "[エンドユーザ数が" プリントカウント} ENDを' / etc / passwdファイル
ユーザー数が0である[スタート]
ルート:X:0:0:ルート:/ルート:/ binに/ bashの
...
[エンド]ユーザー数は40であります
2、ファイルフォルダの統計情報のバイト数を占有します
LS -l | AWK 'BEGIN {サイズ= 0;} {サイズ=サイズ+ $ 5;} END {印刷 "[END]サイズは" サイズ}
[END]サイズは8657198であります
3、占領下のフォルダ内のファイルのバイト数、Mに表示部:
-l LS | AWK 'BEGIN {サイズ= 0;} {サイズ=サイズ+ $ 5;} END {印刷 "[END]サイズは" サイズ/ 1024/1024、 "M"}
[END]サイズは8.25889 Mであります
統計は、サブディレクトリのフォルダが含まれていないことに注意してください。
条件文
で、次の文を参照してください、条件文をC言語から借りているawkは:
IF(式){
ステートメント;
ステートメント;
... ...
}
IF(式){
ステートメント;
}他{
文2;
}
IF(式){
文1;
}そうであれば(式1){
文2;
}他{
statement3;
}
1、フォルダ内のファイルのバイト数は、ファイル(通常はフォルダ)の4096フィルタサイズを占めています。
ls -lでは| awkの「{;印刷 "[スタート]サイズである"、サイズサイズ= 0} BEGIN {するif(!$ = 5 4096){サイズ=サイズ+ $ 5;}} END {印刷 "[終了]サイズがあります"、サイズ/ 1024/1024、 "M"}」
[END]サイズは8.22339 Mであります
ループ
awkは、のために、/しばらく操作を行いながら、C言語のサポートから借り同じループでブレイク、引き続き、 これらのキーワードの同じセマンティクスとC言語の意味論。
配列
AWK、配列の添字は、配列の添字は、しばしば、キー(鍵)を参照され、数字と文字であってもよいです。値とキーは、キー/値のハッシュのアプリケーションのためのテーブルの内部に格納されています。ハッシュが順番に保存されていないので、ショーは、コンテンツの配列を見つけるときに、順不同で予想されるとして、そう、彼らは表示されません。
使用している場合や変数の配列は、自動的に作成され、awkはまた、自動的にデジタルまたは文字列格納するかを決定します。一般に、レコードから情報を収集するために使用されるAWKの配列は、数値の和、および統計トラッキングテンプレート一致する単語等を計算するために使用されてもよいです。
1、ディスプレイ/ etc / passwdファイルのアカウント
awkの-F ':'「{0 =カウント;} BEGIN {名[回数] = $ 1;カウント++;}; END {用(i = 0; iはNRを<; I ++の)印刷I、名前[I]}」/ etc / passwdファイル
0ルート
1つのデーモン
2ビン
3つのSYS
4同期
5つのゲーム
......
配列をループするために本明細書中で使用されます