awkコマンドガイド

:awkの実装プロセス

(1)まず、行う初期化動作が開始{}ブロック
(2)と、データ(の行に読み出される指定されたデータファイルに再循環自動的NF、NR、$ 0、$更新された 1 ......、 のような組み込み変数値)
(3)} {ブロックENDの最後の後続の処理動作を実行します

2:オプションをawkの
-F「:」区切り文字が各フィールドの指定
-vするvarを=値のカスタム変数

3:基本的な使用のawk

  1. 出力コマンド

ITEM1、ITEM2を印刷

キー:(1)、セパレータの数として
(2)各項目の出力が文字列であることができ、数値、現在のレコードのフィールドの発現、またはAWKの変数であってもよい
。例:ヘッド-4の/ etc / fstabに| AWK '{印刷"こんにちは"、$} 1'
(3)項目場合は省略されています。$ 0と同じ、行全体を印刷

2.変数

(1)組み込み変数

FS:-Fオプションのデフォルトは空白に入力等しいフィールド・セパレータ
OFS:出力フィールドセパレータ、空白のデフォルト
RSを:入力行区切り、N-デフォルト\
ORS:とき出力ラインセパレータ、デフォルト\ N例:AWK -F ":" = OFSを-v ":" '{印刷$ 1、$ 2、$ 3}' / etc / passwdファイル
NFの:フィールド数、現在処理中の行(列)
注:$ NFプリント最後フィールド
NR:現在処理された行の数
FNRを:ファイルのそれぞれがカウントされる(行数)
FILENEME:AWKファイル名を参照
$ 0:現在処理ライン全体の行
の$ N:現在n番目の処理場(n列)
ARGC:実施例番号のコマンドラインパラメータ:AWKの/ etc / fstabには/ etc / issuee 'BEGIN {} ARGC印刷'
配列、所定のコマンドラインパラメータに格納されている:ARGVを

AWK実行処理:
(1)まず、初期設定が行われ、{} BEGINブロックである:
(2)次に、ループがデータファイルに指定された行からデータを読み取り、自動的{NF、NR、$ 0、$更新する 1 ... }値等組み込み変数)
とを行う「編集モード又は条件付き命令{}」:
。 (3)後続の処理操作の最後に、ENDを実行{}ブロックは
オプションawkは

-F「:」:、デフォルトのスペース各フィールドの区切りを指定
-v VAR = valueのカスタム変数を

1.出力コマンド
印刷ITEM1、ITEM2

キー:(1)カンマ区切り
、各項目の(2)出力文字列であってもよいし、現在のレコードのフィールド、変数、またはAWKの発現数値であってもよい
ヘッド-5の/ etc / fstabの| AWK 「{印刷「こんにちは、「$ 1} '
行全体の印刷(3)項目省略した場合、$ 0等価、
2を、変数

(1)組み込み変数
FS:デフォルトブランク-Fに等しくフィールドセパレータは、入力
、出力フィールドセパレータデフォルトブランク:OFS
RS:入力ライン分離、N-デフォルト\
ORS:出力における行区切りをデフォルトは\ N-ある
":" ":" OFS = -v '{。。印刷$ 1、$ 2、$ 3を}' / etc / passwdファイルのAWK -F
フィールドの数は、現在の行が処理されたNF(列)
注:$ NF:印刷最後のフィールド
NR現在処理順序番号(行数)の行
FNR:各ファイルは個別にカウント:行の数は
、ファイル名のawkのブラウズ、ファイル名
、行全体が現在処理$ 0行
$ nは、現在処理n番目のフィールド(nはカラム)
ARGC:コマンドライン引数の数
の/ etc / fstabには/ etc /発行'BEGIN {} ARGC印刷' awkは
3
アレイ、コマンドラインパラメータに格納されている所与:ARGV
AWK「BEGIN {印刷ARGV [0]} 'の/ etc / fstabには/ etc /発行
AWKの
AWK' {印刷ARGVのBEGIN [を1]} 'の/ etc / fstabには/ etc /発行
の/ etc / fstabの
AWK' {BEGIN印刷ARGV [2]} /等/ fstabファイルは/ etc /問題
の/ etc /特集

(2)カスタム変数
定義されたメソッド

  1. -v VAR =値
  2. BEGIN {VAR =値}

Linuxを使用して(3)AWK変数

3.printf
フォーマットされた出力:printfのフォーマット、ITEM1、ITEM2、 ...

(1)フォーマットが与えなければならない
------(2)は、明示的な改行区切りの必要性を考慮すると、折り返されない、\ nは
フォーマットされたシンボルの背後にある各項目のフォーマットを指定するために必要とされる(3)。

指定子
%のC:ASCIIショー
%のD、iは10進整数を表示する%
%Eを、%E数値表示科学表記
浮動として示さ%F
%gを、%Gは、科学的表記法で表示されるか、または浮動小数点フォーマットは値
%を表示文字列s
%uは符号なし整数
%自体を表示%%

例子
のawk -F ":" '{printfの"ユーザー名:%sの\ nを"、$ 1}' / etc / passwdファイル

AWK -F: '{printfの "ユーザー名:%sは、UID:%Dを\ n"、$ 1、$ 3}' / etc / passwdファイル

修飾子

[#]:最初の桁は、あまりに第二小数点精度をディスプレイの幅を制御するために使用されます。

%の3.1fの
例としては、
-Fをawkは: '{printfの"ユーザー名 :%の10S、UID:%Dを\ n"、$ 1、$ 3}' / etc / passwdファイル
右整列をデフォルト

- :左
AWK -F: '{printfの"ユーザー名 :%の-10s、UID:%Dを\ n"、$ 1、$ 3}' / etc / passwdファイル

+:ディスプレイのシンボルの値は
、-Fをawkは: '{printfの"ユーザー名 :%の-10s、UID:%+ Dの\ n"、$ 1、$ 3}' / etc / passwdファイル

4.演算子
(1)算術演算子
X + Y、X-Y、Xの*の Y、X / 5、X ^ Y、Xの%をY

+ X:数値への変換

(2)代入演算子
+ = = - = = * /%= = = ^
+ -

(3)比較演算子を:
<より小さい
<=より小さいか等しいことにする
等しい==
に等しい=はありません!

=以上
〜正規表現にマッチする
!〜正規表現に一致しません

(4)パターンにマッチする
! -マッチング〜不一致

(5)論理演算子
&& ||!

(6)関数呼び出し
FUNCTION_NAME(パラメータ1、パラメータ2)

(7)条件表达式
セレクタ?真の表現-IF; IF-偽表現
のawk -F:「{$ 3>を= 500ユーザタイプ= "一般的なユーザー":ユーザータイプ= "がSysadminまたはSYSUSER";のprintf "%15sの:% -のS \ nを" $ 1? 、ユーザータイプ}」/ etc / passwdファイル

  1. PATTERN(モード)
    各列に一致する(1)空:.気モード、
    (2)./正規表現/:ここでのみパターン線に一致させることが
    AWK '/ ^ UUIDは/ {印刷 $ 1}'の/ etc / fstabに

(3)releationalの式の関係式を、本当に間違った結果があり、真として処理される
のawk -F '$ 3> = 500 1 {印刷$、$ 3}' / etc / passwdファイル
のawk -F:NFの「$ == " / binに/ bashの「$ $ '/ etc / passwdファイル{プリント1、NFの}
AWK -F:' {。NFのプリント1} NFの$〜/バッシュ$ / $ $「/ etc / passwdファイル
範囲4.line:行範囲
から指定されましたライン、エンドラインの開始
など猫を/ / passwdファイル| awkの-F :「/ ^ルート/、/ ^同期は、/ {$ 1印刷}」
真:結果がゼロ以外の値は、非空の文字列が真であります

6.BEGIN / ENDパターン
指示を編集する前には、{BEGIN}テキスト処理操作の最初の行を起動//
テキストの最後の行の後に{} //編集指示の操作の終了後

組み込み関数

長さ()は、文字列の長さを取得します。

練習
練習テキスト
grade.txt CAT
M.Tansley。8 40 05/99 48311グリーン44である
J.Luluグリーン9 06/99 48317 24 26である
P.Bunnyイエロー12 35 48 26 02/99である
J.Troll 48 07/99 42は茶色図12は、26が26 -3である
05/99 47 30 12 28 12 2ブラウンであるL.Tansley

このファイルには7つのフィールドがあります

印刷用紙
AWK '{印刷} grade.txt

最初の列及び第7列印刷
AWKを'{$ 1、$印刷 grade.txt 7}

印刷ライン2-4行が
awkの(NR> = 2) &&(NR <= 4){プリント} grade.txt

最初の行の内容及び第三の行を印刷します

awkのNR == 1 || NR == 3 'grade.txt

ファイルヘッダの先頭に追加しました
awkの「{印刷『日付年齢BEGIN grade.txt \ n個-----』} {印刷}」

追加コンテンツファイルの最後に
AWK「{印刷} END {プリント 『Linuxが』}」grade.txt

しばらくのファイルへの画面出力に出力
のawk「{印刷} END {プリント 『Linuxは』}」grade.txt |ティーA.TXT

行全体を分析してブラウン、全体のマッチラインの出力を一致します

awkの '$ 0~ /ブラウン/ {$ 0印刷}' grade.txt

3番目の列を分析して、全体のマッチラインの出力48に等しいです。

awkの '$ 3 == "48" {印刷}' grade.txt

行全体を分析ブラウンと一致しない、出力が行全体の一致していない
awkの$ 0!〜/ブラウン / {$ 0印刷} 'grade.txt

第4列を分析して全ラインが出力に等しくない、ブラウン2に等しいです

awkの$ 4!= "ブラウン-2は、" {$ 0印刷} 'grade.txt

グリーンフィルタファイルまたは緑

AWK '/ [Ggを】REEN / {$ 0印刷}' grade.txt

前部の開始時に任意の3つの文字を分析
AWK「/ [Ggを】REEN / {$ 0印刷}」grade.txt

行全体を分析するか、黄褐色のマッチング
のawk '$ 0〜/(イエロー|ブラウン)/ {0}プリント$' grade.txtを

ラインフィルタの先頭にP
のawk '$ 0~ /ブラウン/ {印刷$ 0}' grade.txt

統計的な行と列が
「END {印刷NRを} awkは grade.txt

AWK 'END {印刷NF} grade.txt

印刷の/ etc /最初の列及び第7列のpasswdファイルの
AWKの-F ":" '{印刷$ 1、$ 7}' / etc / passwdファイル
AWK '{FSの=の":"} BEGIN {。。プリント$ 1、$ 7}' / etc / passwdファイル

全ての奇数出力は
awkの(NR%2)== 1 {印刷} grade.txt

すべての偶数出力
AWK '(NR%2)== 0 {印刷} grade.txt

すべてのシステムユーザの現在のユーザー名の統計は、EXCELスプレッドシートウィンドウシステムで作られたUID、GID、ログインシェル、
$ 7は$ NFは(最後の1)の代わりに使用することができます

AWK -F ":" '{$ 4 " "、" $ 3 $ 1" 印刷"、 "$ 7}' / etc / passwdファイル> user.csv

印刷コンテンツの最後から二番目の列
のawk -F ":" '{印刷 $(NF-1)} / etc / passwdファイル

メモリは、アラーム(四捨五入)の85%以上を使用する場合は
、[$(無料-m | awkの/キャッシュ:/ {プリントのint($ 3 /($ 3 + $ 4)* 100)。。。} ')85 -gt] &&エコー「メモリこれは、85%以上使用されています。」

awkのシェル変数を参照します

名前= "zhangsan"

awkの-v NM = "$名" '{印刷NMを} BEGIN'

AWK -v NM = "ABC" 'BEGIN {印刷NM}

awkの条件文

単一肢形式
'{IF(式)コマンド1; 2コマンド;} ....'

例子
AWK '{IF($ 6 <$ 7)$ 7が高すぎる印刷}' grade.txt
AWK '{($ 4〜/ブラウン/)$ 0印刷する場合}' grade.txt
AWK「{場合($ 1 == "P.Bunny" && $ 4 == "イエロー")pinrt $ 0}」grade.txt

AWK '{場合($ 1 == "P.Bunny" || $ 4 == "黄色")pinrt $ 0}' grade.txt

AWK '{名前= $ 1; belets = $ 4; IF(belets〜/イエロー/)印刷名}' grade.txt

AWK '{($ 6 <BASEFILE)が$ 1印刷する場合} {BASEFILE = "27"} BEGIN' grade.txt

他の/他のif文は、複数判断した場合
「{IF(式)コマンド1、コマンド2; ...;
他の(式){コマンド1 IF; 2のコマンド; ...; 1他のコマンド、コマンド2; ... 。} '

例子
AWK '{($ 7 == 44)場合には、$ 1印刷、他の($ 7 == 28)$ 2印刷する場合、他の$ 3印刷}' grade.txt
{$ 2印刷($ 7 == 44)であれば、他の$ 1印刷} AWK」 「grade.txt

循環

ループforループwhileループを行います

while文

一方、(式){文}

変数1の初期値、iはNF(レコード内のフィールドの数)に等しい未満である場合、印刷ステートメントが実行され、iはI> NFまで1ずつ切断します

AWK 'NR == 1 {I = 1;(iは= NFを<){iが$、NFを印刷している間、私は++}}' grade.txt

AWK 'BEGIN {;合計= 0;テスト= 100(私は=試験<)しながら{合計+ = I; iは++;}印刷総;}

forループ

フォーマット1

便利な配列要素
(配列で変数){文}の
AWK 'BEGIN {(ENVIRON Kに)ため、{印刷K "=" ENVIRON [K];}}

フォーマット2

(;条件;変数式)のための{声明}
'NR 1 == {のための(I = 1。; I <= NFの;私は++)NFの印刷、$ I;}'のawk grade.txt

AWK '{合計= 0 {合計+ = I;}印刷総;(; iは= 100 <I ++はi = 0)に関して} BEGIN'

出口プログラムループを引き起こしながら、またはfor文、break文を使用した際の、改行

プログラムは次のループ反復に移動するようにcontinue文はwhiler用またはステートメントのために継続すると

それは次の読み取り、次の入力行につながる、スクリプトの先頭に戻ることができます。これは、現在の上の他の操作の入力ラインの実行を回避します

exit文とENDにメインループ制御を終了; END存在する場合、撤退は存在しません。

行う-whileループ(かかわらず、最初の条件が真であるかどうか、ループを介して第1の時間です)

フォーマット:

行う

{文}ながら(条件)

AWK「{合計= 0 BEGIN。I = 0; 実行{合計+ = I。I ++; }一方(iは<= 100)、プリント総。}」

配列

連想配列の配列[素子アレイ]
二重引用符(1)任意の文字列を使用することができる、ストリング
(2)配列要素を参照して、予め存在しない場合は、AWKは自動的にこの要素を作成し、その値を初期化します「空の文字列」

配列の要素があるかどうかを決定するために、「配列のインデックス」を使用して実施されるフォーマット

wekdays = [月] = "月曜日"

AWK 'BEGIN {wekdays [ "月"] = "月曜日"; wekdays [ "火"] = "火曜日";のための(I wekdaysで){印刷wekdays [I]}}

私は、各変数配列インデックスを通過しますwekdays

取得システムのTCP接続ステータス統計
netstatコマンドの-tan | awkの'/ ^ TCP > / {状態[$ NF] ++} END {のために(I状態){プリントI、状態[I]}}' |並べ替え- RN

注意:実際の作業のnetstatの効率が比較的低く、コマンドSSを使用することをお勧めします

SS -antup | awkの{(I状態){プリントI、状態[I]}}用/ TCP> / {状態[$ 2] ++} END '| ソート-rn

SS -antup | AWK '/ UDP> / {状態[$ 2] ++} END {ための式(I状態){印刷I、状態[I]}}' | ソート-rn

IPアクセス統計、特定の数
の猫は/ var / log / httpdの/ awkの{; IP [I]}(I腹腔内){プリント私のために} {IP [$ 1] ++} END '|のaccess_log

機能
1組み込み関数
のrand():0と1の間の乱数を返し
指令値が同じに取られるAWKと

列処理
lengethは([S])文字列の長さを返し
部分(R、S、[Tを ]): Rは、Tによって表される文字列に一致を探しているモードを示します。コンテンツの表現のコンテンツと交換一致
スライス
分割(複数可、[R ]): 切削ストリング区切り文字rはSであり、結果はで示さ切断する配列に格納されて
AWKのアレイインデックスは1から始まる番号

おすすめ

転載: www.cnblogs.com/bingguoguo/p/10994649.html