?? awk最新教程.txt
字號:
第三章 模式(pattern)
在一條“模式-動作”語句中,模式是一個表達式,用來確定執行相關操作的那些記錄(行)。也就是在awk處理數據時,只有數據行與模式相匹配,程序中相對應的動作才會被執行。
3.1 BEGIN和END
BEGIN和END是兩個特殊的模式。
BEGIN的作用是在處理第一條記錄之前將BEGIN后面大括號之內的動作運行且只運行一次,也就是BEGIN匹配第一個輸入記錄之前。
END的作用是在處理完最后一條記錄之后將END后面大括號之內的動作運行且只運行一次,也就是說,END匹配最后一個輸入記錄之后。
如:
awk ‘BEGIN { print “my program begin !”;i=0 } { i=i+$1 print $1 } END { print “total :”,i }’ file0
3.2 用表達式(Expression)作為模式
一個awk模式可以是一個表達式,用這個表達式來測試兩個數字或字串的諸如大于、等于、小于等關系。
awk有六個關系操作符和兩個匹配符:
x<=y 如果 x 小于、等于 y,則結果為真。 x>y 如果 x 大于 y,則結果為真。
x>=y 如果 x 大于、等于 y,則結果為真。
x==y 如果 x 等于 y,則結果為真。
x!=y 如果 x 不等于 y,則結果為真。
x~y 如果 x 符合 regular expression y,則結果為真。
x!~y 如果 x 不符合 regular expression y,則結果為真。
上面所提到的 x 與 y,如果二者皆是數字則視為數字之間的比較,否則它們會被轉換成字符串且以字符串的形式做比較。兩個字符串的比較,會先比較第一個字符,然后比較第二個字符,依此類推,直到有不同的地方出現為止。如果兩個字符串在較短的一個結束之前是相等,則視為長的字符串比短的字符串大。例如 "10" 比 "9" 小,"abc" 比 "abcd" 小。
例:awk ‘$1>5{ print $0 }’ file0
其結果是把文件file0中第一個字段大于5的所有行打印出來。
3.3 用正則表達式(Regular Expressions)作為模式
awk還提供了比前面介紹的功能更強的字符串查找模式。這些模式稱做正則表達式,最簡單的正則表達式是用兩個順斜杠“/”把字符串括起來,例如:/Asia/ 一個regular expression (正則表達式)可簡寫為 regexp,當輸入記錄含有regexp時就視為符合。如上例中的/Asia/,對于任何輸入記錄,若含有'Asia'則視為符合。
例如:awk '/Asia/ { print $2 }' earth,結果將把文件earth中所有含'Asia'的行的第二個字段打印出來,而不論'Asia'這個字符串在一行中的哪一部分。
通常,為了將一個匹配限制在一個特定的域上,可以使用匹配操作符~(匹配)和!~(不匹配)。
如:awk '$2 ~ /Asia/ { print $0 }' file0
將把文件file0中第二個字段是字符串Asia的行全部打印出來。
而:awk '$2 !~ /Asia/ { print $0 }' file0
將把文件file0中第二個字段不是字符串Asia的行全部打印出來。
在正則表達式中,符號 \ ^ $ . [ ] * ? ( ) 是元字符,這些元字符象UNIX Shell中的元字符一樣有特殊的含義。
例如,元字符“^”和“$”分別匹配字符串的開始和結束,而元字符“.”匹配任意單個字符。如 /^.$/ 將匹配所有只包含一個字符的輸入行。由括號括起來的一組字符,表示匹配其中的任何一個字符。如/[ABC]/與那些無論在什么地方包含A,B,C中任一字符的記錄相匹配。多個字符或數字可以在括號內采用縮寫形式:/[a-z]/,它與所有純小寫字母字符串相匹配。 /^[0-9]+$/匹配所有以數字開頭的字符串。在元字符的前面加上一個“\”,就可以關閉元字符的特殊含義。這樣,/b\$/匹配所有包含b$這兩個字符的行。
3.4 模式組合
一個組合的模式是由較簡單的模式加上圓括號和邏輯操作符&&與,||或,!非來構成的。
例如:
awk '$1==“Asia” && $3>500 { print $0 }’earth
將文件earth中所有第一個字段為Asia,且第三個字段大于500的行打印出來。
awk '$1==”Asia”||$1==“Africa” { print $0 }’earth
awk '$1~/^(Asia|Africa)$/ { print $0 }’earth
以上兩句都是將文件earth中所有第一個字段為Asia或者為Africa的行打印出來。
awk '$1!=“Asia” && $1~/^[As]/ { print $0 }’earth
將文件earth中所有第一個字段包含As但不為Asia的行打印出來。
非操作符!的優先級最高,其次是&&,最后是||。操作符&&和||從左到右判斷它們的操作數,當得到真或假值時,這種判斷即停止。
第四章 動作(action)
4.1.1 輸入
awk所處理的數據可以從指定的文件中讀取或者接收某些命令的執行結果,再或者可以直接從標準輸入設備上輸入。
1)從文件中輸入格式為: awk ‘{ action }’ filename1 filename2 ...
執行時,awk將依次從filename1 filename2 ...文件中讀取數據并執行action操作.
如: awk ‘{ print $1 }’ file1
從文件file1中讀取數據,并將打印每行的第一個字段
2)從其它命令輸入格式為: Unix命令| awk ’{ action }’
執行時,awk將接收Unix命令的輸出,并對輸出執行action操作.
如: who | awk ‘{ print $2 }’
如果who命令結果為: root ttyp0 Jul 6 14:19,則上面awk語句的執行結果為:ttyp0
3)從標準輸入設備上輸入在命令行上輸入awk ’{ action }’并回車后,awk語句便處于等待狀態,此時可以輸入一條記錄,當打回車確認后,awk語句將對這一行進行處理。如果符合處理的條件,awk就會將處理結果顯示到屏幕上。接著,再次進入等待輸入的狀態。如此循環下去,一直到打Ctrl-d退出或被del鍵中斷。
4) 讀入awk以外的Shell變量
有時需要將awk以外的變量讀入到awk之中,通常有兩種方法:
a. 直接引用外部變量aa="字符串" awk ' { print "'$aa'" }'如果變量aa的值是一個漢字字符串,則在SCO Unix3.0上運行將顯示不出來,在5.0上沒有問題。
b. 間接引用外部變量aa="string" awk '{ print bb }' bb=$aa
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -