Linuxのawkのコマンドの使用

 
概要
AWKは、デフォルトの区切りスペースとして、スライスの各列を行毎にファイルを読み取り、次いで、種々の評価部分を切断すること
が読み取る「\ n」は改行を分離:AWKワークフローは、そのようなものですドメインにレコードと指定されたフィールドデリミタのレコードが、ドメインが充填され、その後、すべてのドメイン$ 0、$ 1は、第1のフィールドを表し、$ nは、n番目のフィールドを意味します。デフォルトのフィールドセパレータは、 "キーブランク"または"[タブ]ボタン"である
 
awkコマンド形式:
AWK [-F | -f | -v] '} {BEGIN // {のCommand1; Command2のENDは{}}'ファイル
 [-F | -f | -v]グレートパラメータは、スクリプトは-f呼び出し、区切り文字を指定し、-v変数値= VARを定義-F
参照ブロックが'
主、初期化コード、前の各行を処理する初期化コードブロックをBEGIN FS分離配置され、グローバル変数への参照である
//マッチングブロックは、ストリングまたは正規表現であってもよい
{}コマンド・コード・ブロック、1つ以上のコマンドを含む
、セミコロンで区切られた複数のコマンド、
ブロックの最後端、上各ライン後のコードブロックは、要約情報の再実行、主として最終的な計算又は出力端処理される
 
特別ポイント:
$ 0が現在の行全体を表す
行につき$第1フィールド
NFフィールド番号変数
各行のNRレコード番号、および複数のファイルレコードインクリメント
FNRやNR似ていますが、より多くのドキュメントは最初から各ファイルをインクリメントされていません
\ tタブ
\ nは改行
区切りで定義されては、FS BEGIN
レコードセパレータのRS入力、デフォルトの改行(ラインにより、すなわち、ライン、テキスト入力をベースとする)
〜試合が==比較に比べて正確ではありません
!〜不一致、不正確な比較は
==等しい、でなければならない全て等しい、正確な比較
!=等しくない、正確な比較
&&論理AND
||またはロジックは、
一つ以上+ 1マッチ表し
/ [0-9] [0-9] +を/二つ以上のデジタル
/ [0-9] [0-9] * /または1つ以上のデジタル
ファイル名のファイル名
OFS出力フィールドセパレータ、デフォルトでの等スペース、タブ、ある
記録出力ORSセパレータ、改行文字にデフォルト、即ち、処理結果は、ラインによるスクリーン線に出力される。
-F「[#/]」は3枚のセパレータ定義
 
プリント&$ 0
プリント指定された印刷コンテンツは、主AWKコマンドである
AWK '{印刷} / etc / passwdファイル==のawk '{印刷  $ 0}' / etc / passwdファイル
AWK「{印刷『』}」 / etc / passwdファイル// passwdの内容を出力しないが、空白行の同じ数の出力、さらにラインによってテキスト行を処理AWK説明する
AWK「{印刷『A』を} 」の/ etc / passwdを//出力ラインの同じ数、文字の一つだけライン
のawk -F ":" '{} 1印刷$' / etc / passwdファイル
AWK -F: '$ {プリント1; 2印刷$}' / etc / passwdファイル//ライン処理により、各列の最初の2つのフィールド、出力分岐、テキスト行のさらなる理解
AWKの-Fは: '{$ 1印刷 、$ 6 $ 3}' OFS = "\ T" / etc / passwdファイル// 出力フィールド1、 3,6、および区切り文字としてタブ
 
スクリプトファイルの指定-f
ファイル-f awkはscript.awk
BEGIN {
FSの=を":"
}
{} //プリント効果1 $のawk -F ":"「{印刷 $ 1} 「コード自体で指定された区切りFSを除いて、同じである
 
{X = 0} BEGIN awkの 」、 "私が見つける" / ^ $ / {X + = 1} END {印刷X空白行。 "}」テスト
私は4つの空白行を見つけます。
 ls -lで| awkのBEGIN {!合計= 0} / ^ D / {合計+ = $ 5} END {印刷は"合計サイズがある"、合計} '// ファイルサイズの計算
の合計サイズが17487 IS
 
区切り指定-F
$手段1セパレーター、最初のフィールド、第3フィールド3 $、\タブTが指定した後、
区切り文字として見られる一個の又は複数の連続したスペースまたはタブを、すなわち、空白の複数見
AWK - F. ":" '{印刷$ 1}' / etc / passwdファイルの
パーティション無し/ etc / passwdファイル// $ 1と出力に接続された$ 3:AWKの-F "" '{印刷$ 1 $ 3}'。
":"「{印刷AWKの-F $ 1、$ 3} '/ etc / passwdファイル// コンマよりも、$ 1とスペースで区切られた$ 3
AWKの-F ":"' {印刷 $ 1 "" $ 3}「/ etc / passwdファイル// 手動で追加の間に$ 1と$ 3スペースで区切っ
-Fをawkは":" '{印刷 "ユーザー名:" $ 1 "\ T \ T Uidの:" $ 3}' / etc / passwdファイル// カスタム出力 
のawk -F: '{NFを印刷} '/ etc / passwdファイル//行あたりどのように多くのフィールドを表示
AWK -F: '{印刷$ NF }' / etc / passwdファイル// NF印刷された線の各フィールドの値
 AWK -F: 'NF == 4 {印刷}' / etc / passwdファイル// 表示のみ4磁力線は、
-Fをawkは: 'NFは> 2 { $ 0印刷}' / etc / passwdファイル// 行あたりのフィールド数が2以上であることを示し
AWK '{印刷NR、$ 0 }' / etc / passwdファイル// 行当たりの出力行番号
のawk -F: '{印刷NR、 NF、$ NF、 "\トン"、$ 0}' / etc / passwdファイル// プリントラインの注文番号、フィールド、フィールド値と最終的には、タブの数、各ライン
AWK -F: 'NR == 5 {印刷}' / etc / passwdファイル// 表示ライン5。
AWKの-F: '|| NR NR == == 5 6} {プリント'の/ etc / passwdの//を表示します。5と行線6
ルート-n | awkの!= NR 1} {印刷が'最初の行//ない
 
//マッチングブロック
// //純粋な純粋な文字は文字がフィールドの値が一致すると一致しない一致する〜@! !   フィールドの値が一致しない〜@〜/ A1 | A2 / A1フィールドの値が一致するかA2
awkの/ MySQLの/ '/ etc / passwdファイル
awkの/ MySQLの/ {印刷} '/ etc / passwdファイルの
ようにawkの/ MySQLの/ {$ 0印刷}' / etc / passwdファイル// 3つの命令結果
のawk '!/ mysqlの/ {印刷 $ 0}' / etc / passwdファイル// 出力ラインは、MySQL一致していない
/ etc / passwdファイルの| '} {メール/印刷/ mysqlの' AWKを
awkの| / etc / passwdファイル'!/ mysqlのメール/印刷} {'
のawk -F:「/メール/、/ mysqlの/ {印刷} '/ etc / passwdファイル//整合部
AWK' / [2] [7 ] [7] * / {} $ 0印刷「/ etc / passwdファイル// マッチングは、27277として、ディジット線で開始する27を備え、 2777 ...
のawk -F: '$ 1〜/メール/ {。プリント$ 1}' / etc / passwdファイル// $ 1指定されたコンテンツのみを表示し一致した
awkの-Fを: '{($場合は 1〜/メール/)は、$ 1を印刷します}' / など上記のように/ passwdの//同じ
のawk -F: '$ 1〜! /メール/ {$ 1印刷}' / etc / passwdファイル// 不一致
のawk -F: '$ 1〜/        !メール| MySQLは/ {$ 1印刷}'/ etc / passwdファイル
 
IF文は、
中括弧で)} {で使用される、および(と内容を比較します
awkの-F: '{するif($ 1〜/メール/)$ 1を印刷}' / etc / passwdファイル// 短い
のawk -F: '{($場合は / etc / passwdファイル/ 1〜/メール/){} $ 1印刷}' /完全な書き込み
のawk -F: '{($場合は 1〜/メール/){} $ 2印刷{他} $ 1を印刷}' / etc / passwdファイル// ...他にあれば...
 
 
条件式
== =>! > = 
AWK -F ":" '$ 1 == "MySQLの" {印刷$ 3}' / etc / passwdファイルの 
AWKの-F ":" '{IF($ 1 == "のMySQL")印刷$ 3}' / etc / passwdファイル/ /上記と同様
のawk -F ":" '!$ / etc / passwdファイル// 1 = "mysqlの" {$ 3印刷}' 等しくない
awkの-Fを":" '$ 3 > 1000年{$ 3印刷}' / etc / passwdファイル/ /超える
AWKの-F ":" '$ 3 > = 100は、{$ 3印刷します}'/ etc / passwdファイル//以上
のawk -F ":" '$ 3 <1、{$ 3印刷}' / etc / passwdファイル// 未満
awkの-F ":" '$ 3 <= 1 {$ 3を印刷}' / etc / passwdファイル// 以下
 
の論理演算子
&& ||
のawk -F '$ 1〜/メール/ && $ 3>。8 {印刷}'の/ etc / passwdの//ロジック、$マッチングメール、および$ 3>の8。。
awkの-F: '{IF印刷($ 1〜/メール/ && $ 3>の8。。)}' / etc / passwdファイル
のawk -F:「$ 1〜/メール/ || $> 1000 3 {印刷} '/ etc / passwdファイル// 論理や
awkの-F:' {するif($ 1~ /メール/ || $ 3> 1000)印刷} '/ etc / passwdファイル
 
値算出
のawk -F' 。$> 100 3 '/ etc / passwdファイル   
のawk -F:' $> 100 3 || $ 3 <5 '/ etc / passwdファイル。。。 
awkの-F:' $ 3 + $ 4> 200 'は/ etc / passwdファイルである。
awkの-F:' / MySQLの|メール/ {$ 3 + 10印刷} '/ etc / passwdファイル// 3番目のフィールドに加えて10印刷
AWK -fを' / MySQLの/ { '$ 3- $ 4印刷}/ etc / passwdファイル//減算
awkの-F: '/ mysqlの/ { $ 3 * $ 4印刷}' / etc / passwdファイル// 製品を見つける
のawkを'/ MEMFREE / {$印刷 1024分の2を}'は/ proc / meminfoに// 部門
のawk「/ MEMFREE / {印刷int型($ 1024分の2)} 'は/ proc / meminfoに// 丸め
 
OFSデリミタ出力
AWK' $を6〜/ FIN / || NR == 1 {印刷NR、$ 4、$ 5、$ 6}「OFS = "\のT"は、netstat .txtの
AWK '$ 6〜/ WAIT / || {プリント。1 == NR NR、$ 4、$ 5、6} $' OFS = "\ T" Netstat.txt       
//マッチングWAIT線出力フィールド6、各行の前記出力番号、4,5,6フィールド、および使用して、タブで区切られたフィールド
 
のファイルに出力し、処理結果を
出力ブロックに直接-nルートで①コマンドコード| awkの「= NR 1 {印刷> 『./fs』}!」  
②出力リダイレクトルート-n | awkの> ./fs' NR = 1 {印刷}! '
 
フォーマットされた出力
は、netstatの-anp | awkの' {printf関数" %-8s%-8s%-10s \ n"は、$ 1、 $ 2、$ 3} "
printfの出力形式は表し
%フォーマットされた出力デリミタを
-8 8つの文字長
の文字列型を表し
最初の3つのフィールドの各ラインを印刷し、最初のフィールドは、出力文字列(長さ8)、第二の出力文字列フィールドタイプ(長さ8)のタイプを指定する
出力列型(長さ10)の第3のフィールドを
netstatの-anp | awkの$ 6 == "LISTEN" NR || 1 == {のprintf "%-10S%-10S -10S%\ N-"、$ 1、$ 2、$。} 3。。。 "
netstatの-anp | awkの== $ 6 || "LISTEN" NR 1 == {のprintf "%-3S -10S %%% -10S -10S \ N-"、NR、$ 1、$ 2、$。} 3 '。
 
IF文
のawk -F:' {IF($ 3> 100 )プリント"大"、他プリント"小"} '/ etc / passwdファイル
スモール
スモール
スモール

スモール
スモール
AWK -F:'。BEGIN {A = 0、B = 0} {IF($> 100 3){A ++;印刷」大"}他{B ++; 印刷"小"}} END {印刷A、" \ T」、B}/ etc / passwdファイル
                                                                                                                  // IDはプラス1、またはBプラス1、100よりも大きいです
awkの-F:「{するif($ 3 '100)次; 他の印刷}」/ etc / passwdファイル//小于100跳过、否则显示
AWK -F: 'BEGIN {i = 1} {(iはNFを<)印刷NR、NF場合、iは} ++ / etc / passwdファイル  
AWK -F 'BEGIN {I = 1} {(iの場合は、<NFを){印刷NR、NF}私は++}' / etc / passwdファイル
另一种形式
のawk -F:「{印刷($ 3>の100 "はい":? "いいえ「)} '/ etc / passwdファイル
のawk -F: '{印刷($ 3>の100 $ 3→ ":":$ 3 ":tyes \ \ TNO")}'/ etc / passwdファイル
 
语句中
のawk -F:' {BEGIN IプリントNF(iはNFを<)しながら= 1} {$ iは、iが++} '/ etc / passwdファイル
7ルート1
7×2
7 0 3
7 0 4
7ルート5
7 /ルート6
 
数组
netstatの-ANP | AWK' NR != 1 {[$ 6] ++} END {ための式(I)で印刷I、 "\ tの"、[I]}」

。1 9523    
9929. 1    
。LISTEN 6    
7903. 1    
。3038 / cupsdの1    
7913. 1    
10837. 1    
9833. 1    
 
アプリケーション1。
のawk -F: '{} NF印刷の' helloworld.sh //出力ファイル番号フィールド行あたり
のawk -F:「{$ 1を印刷、$ 2、$ 3、$ 4、$ 5} 'helloworld.sh //出力フィールドの前に5は、
-Fをawkは:' {$ 1印刷 、$ 2、$ 3、$ 4、$ 5} 'OFS =' \ T「helloworld.sh // 出力タブ出力によって分離し、最初の5つのフィールド
awkの-F: '{印刷NR、 $ 1、$ 2、$ 3、$ 4、$ 5}' OFS = '\ t'のhelloworld.sh // タブで区切られたフィールドの前に出力5、行番号と印刷
 
アプリケーション2
のawk -F '[#]' '{ NFを印刷}' helloworld.sh // 複数の区切り文字を指定:#、出力回線番号フィールド当たり
のawk -F '[#]を' 「{$ 1、$ 2、$ 3、$ 4を印刷$ 5、$ 6 $ 7 } 'OFS =' \ t 'のhelloworld.sh // タブ区切りフィールド複数の出力
 
アプリケーション3。
AWKの-F' [#/] '' NFの} {印刷「//三helloworld.shを指定しましたデリミタ、およびフィールドの各行番号の出力は
-F awkの[#/] ' ''{$ 1、$ 2、$ 3、$ 4、$ 5、$ 6 $ 7 $ 8 $ 9 $ 10 $ 11 $ 12印刷}のHelloWorld。 SH //出力マルチプレクサタブ区切りのフィールドが
 
4適用される
ユニットとして、通常のファイルのサイズ、KBを計算/ homeディレクトリを
!awkのBEGIN {| ls -lで合計= 0} / ^ D / {合計+ = $ 5} END {印刷"の合計サイズは、:" 、和/ 1024、 "KB"}
LS -l | awkの!BEGIN {合計= 0} / ^ D / {合計+ = $ 5} END {印刷"合計サイズがある:"、INT(合計/ 1024)、 "KB"} '// intが丸めされますそれは意味
 
のアプリケーション5
の接続数と数の接続にそれぞれの状態をLISTEN -anp統計netstatコマンドを
netstatの-anp | awkの「$ 6~ / LISTEN |(I合計で)のprintf "のための接続/ {合計[$ 6] ++} END { %-10s%-6s%-3S \ N "私、"」、合計[I]} '
 
アプリケーション6
普通のユーザーの合計数の統計/ homeディレクトリのファイルはかなり違うのですか?
-l LS | !! AWK「NR (I合計で)のprintf "%-6s%-5S%-3S \ n" = 1 && / ^ D / {和[$ 3] ++} END {iが、「 」、SUM [i]は} '  
MySQLの199
ルート374
異なるユーザ統計/ homeディレクトリの下に通常のファイルの合計サイズの大きさはどのくらいですか?
LS -l | !! AWK「NR = 1 && / ^ D / {和[$ 3] + = $ 5}ためEND {(I合計で)のprintf "%-6s%-5S%-3S%-2S \ n"は、I、 ""、和[ I] / 1024/1024、 "MB"}
 


awkは「{数学= 0をBEGIN; ENG = 0; COM = 0;のprintf "LINENO名前号数学、英語、コンピュータ合計\ n" は;のprintf「----------------- -------------------------------------------する\ n "} {数学+ = $ 3; ENG + = $ 4; COM + = $ 5;のprintf "%-8s%-7s%-7s%-7s%-9s%-10s%-7s \ n"、NR、$ 1、$ 2、$ 3、$ 4、$ 5、$ 3 + $ 4 + $ 5} END {printfの「----------------------------------------------- ------------- \ nは ";のprintf "%-24s%-7s%-9s%-20s \ n" は、" トータル: "数学、ENG、COM;のprintf" % - 24S%-7s%-9s%-20s \ n」は、 "平均:"、数学/ NR、ENG / NR、COM / NR}」TEST0
[ルート@ localhostのホーム]#猫のTEST0は、
2143年78 84 77結婚
ジャック2321年66 78 45
トム・2122 48 77 71
マイク・2537 87 97 95
ボブ・2415 40 57 62
 

 

 

おすすめ

転載: www.cnblogs.com/zhangrui153169/p/11506517.html