锘?!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
Table of Contents
awk鏄竴縐嶇紪紼嬭璦錛岀敤浜庡湪linux/unix涓嬪鏂囨湰鍜屾暟鎹繘琛屽鐞嗐傛暟鎹彲浠ユ潵鑷爣鍑嗚緭鍏ャ佷竴涓垨澶氫釜鏂囦歡錛屾垨鍏跺畠鍛戒護(hù)鐨勮緭鍑恒傚畠鏀寔鐢ㄦ埛鑷畾涔夊嚱鏁板拰鍔ㄦ佹鍒欒〃杈懼紡絳夊厛榪涘姛鑳斤紝鏄痩inux/unix涓嬬殑涓涓己澶х紪紼嬪伐鍏楓傚畠鍦ㄥ懡浠よ涓嬌鐢紝浣嗘洿澶氭槸浣滀負(fù)鑴氭湰鏉ヤ嬌鐢ㄣ俛wk鐨勫鐞嗘枃鏈拰鏁版嵁鐨勬柟寮忔槸榪欐牱鐨勶紝瀹冮愯鎵弿鏂囦歡錛屼粠絎竴琛屽埌鏈鍚庝竴琛岋紝瀵繪壘鍖歸厤鐨勭壒瀹氭ā寮忕殑琛岋紝騫跺湪榪欎簺琛屼笂榪涜浣犳兂瑕佺殑鎿嶄綔銆傚鏋滄病鏈夋寚瀹氬鐞嗗姩浣滐紝鍒欐妸鍖歸厤鐨勮鏄劇ず鍒版爣鍑嗚緭鍑?灞忓箷)錛屽鏋滄病鏈夋寚瀹氭ā寮忥紝鍒欐墍鏈夎鎿嶄綔鎵鎸囧畾鐨勮閮借澶勭悊銆俛wk鍒嗗埆浠h〃鍏朵綔鑰呭姘忕殑絎竴涓瓧姣嶃傚洜涓哄畠鐨勪綔鑰呮槸涓変釜浜猴紝鍒嗗埆鏄疉lfred Aho銆丅rian Kernighan銆丳eter Weinberger銆俫awk鏄痑wk鐨凣NU鐗堟湰錛屽畠鎻愪緵浜?jiǎn)Bell瀹為獙瀹ゅ拰GNU鐨勪竴浜涙墿灞曘備笅闈粙緇嶇殑awk鏄互GUN鐨刧awk涓轟緥鐨勶紝鍦╨inux緋葷粺涓凡鎶奱wk閾炬帴鍒癵awk錛屾墍浠ヤ笅闈㈠叏閮ㄤ互awk榪涜浠嬬粛銆?/P>
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
鎸囧畾杈撳叆鏂囦歡鎶樺垎闅旂錛宖s鏄竴涓瓧絎︿覆鎴栬呮槸涓涓鍒欒〃杈懼紡錛屽-F:銆?/P>
璧嬪間竴涓敤鎴峰畾涔夊彉閲忋?/P>
浠庤剼鏈枃浠朵腑璇誨彇awk鍛戒護(hù)銆?/P>
瀵筺nn鍊艱緗唴鍦ㄩ檺鍒訛紝-mf閫夐」闄愬埗鍒嗛厤緇檔nn鐨勬渶澶у潡鏁扮洰錛?mr閫夐」闄愬埗璁板綍鐨勬渶澶ф暟鐩傝繖涓や釜鍔熻兘鏄疊ell瀹為獙瀹ょ増awk鐨勬墿灞曞姛鑳斤紝鍦ㄦ爣鍑哸wk涓笉閫傜敤銆?/P>
鍦ㄥ吋瀹規(guī)ā寮忎笅榪愯awk銆傛墍浠awk鐨勮涓哄拰鏍囧噯鐨刟wk瀹屽叏涓鏍鳳紝鎵鏈夌殑awk鎵╁睍閮借蹇界暐銆?/P>
鎵撳嵃綆鐭殑鐗堟潈淇℃伅銆?/P>
鎵撳嵃鍏ㄩ儴awk閫夐」鍜屾瘡涓夐」鐨勭畝鐭鏄庛?/P>
鎵撳嵃涓嶈兘鍚戜紶緇焨nix騫沖彴縐繪鐨勭粨鏋勭殑璀﹀憡銆?/P>
鎵撳嵃鍏充簬涓嶈兘鍚戜紶緇焨nix騫沖彴縐繪鐨勭粨鏋勭殑璀﹀憡銆?/P>
鎵撳紑鍏煎妯″紡銆備絾鏈変互涓嬮檺鍒訛紝涓嶈瘑鍒細(xì)\x銆佸嚱鏁板叧閿瓧銆乫unc銆佹崲鐮佸簭鍒椾互鍙?qiáng)褰揻s鏄竴涓┖鏍兼椂錛屽皢鏂拌浣滀負(fù)涓涓煙鍒嗛殧絎︼紱鎿嶄綔絎?*鍜?*=涓嶈兘浠f浛^鍜宆=錛沠flush鏃犳晥銆?/P>
鍏佽闂撮殧姝e垯琛ㄨ揪寮忕殑浣跨敤錛屽弬鑰?grep涓殑Posix瀛楃綾?錛屽鎷彿琛ㄨ揪寮廩[:alpha:]]銆?/P>
浣跨敤program-text浣滀負(fù)婧愪唬鐮侊紝鍙笌-f鍛戒護(hù)娣風(fēng)敤銆?/P>
鎵撳嵃bug鎶ュ憡淇℃伅鐨勭増鏈?/P>
pattern {action} 濡? awk '/root/' test錛屾垨$ awk '$3 < 100' test銆?/P>
涓よ呮槸鍙夌殑錛屽鏋滄病鏈夋ā寮忥紝鍒檃ction搴旂敤鍒板叏閮ㄨ褰曪紝濡傛灉娌℃湁action錛屽垯杈撳嚭鍖歸厤鍏ㄩ儴璁板綍銆傞粯璁ゆ儏鍐典笅錛屾瘡涓涓緭鍏ヨ閮芥槸涓鏉¤褰曪紝浣嗙敤鎴峰彲閫氳繃RS鍙橀噺鎸囧畾涓嶅悓鐨勫垎闅旂榪涜鍒嗛殧銆?
妯″紡鍙互鏄互涓嬩換鎰忎竴涓細(xì)
/姝e垯琛ㄨ揪寮?錛氫嬌鐢ㄩ氶厤絎︾殑鎵╁睍闆嗐?/P>
鍏崇郴琛ㄨ揪寮忥細(xì)鍙互鐢ㄤ笅闈㈣繍綆楃琛ㄤ腑鐨勫叧緋昏繍綆楃榪涜鎿嶄綔錛屽彲浠ユ槸瀛楃涓叉垨鏁板瓧鐨勬瘮杈冿紝濡?2>%1閫夋嫨絎簩涓瓧孌墊瘮絎竴涓瓧孌甸暱鐨勮銆?/P>
妯″紡鍖歸厤琛ㄨ揪寮忥細(xì)鐢ㄨ繍綆楃~(鍖歸厤)鍜寏!(涓嶅尮閰?銆?/P>
妯″紡錛屾ā寮忥細(xì)鎸囧畾涓涓鐨勮寖鍥淬傝璇硶涓嶈兘鍖呮嫭BEGIN鍜孍ND妯″紡銆?/P>
BEGIN錛氳鐢ㄦ埛鎸囧畾鍦ㄧ涓鏉¤緭鍏ヨ褰曡澶勭悊涔嬪墠鎵鍙戠敓鐨勫姩浣滐紝閫氬父鍙湪榪欓噷璁劇疆鍏ㄥ眬鍙橀噺銆?/P>
END錛氳鐢ㄦ埛鍦ㄦ渶鍚庝竴鏉¤緭鍏ヨ褰曡璇誨彇涔嬪悗鍙戠敓鐨勫姩浣溿?/P>
Table 1. awk鐨勭幆澧冨彉閲?/B>
| 鍙橀噺 | 鎻忚堪 |
|---|---|
| $n | 褰撳墠璁板綍鐨勭n涓瓧孌碉紝瀛楁闂寸敱FS鍒嗛殧銆?/TD> |
| $0 | 瀹屾暣鐨勮緭鍏ヨ褰曘?/TD> |
| ARGC | 鍛戒護(hù)琛屽弬鏁扮殑鏁扮洰銆?/TD> |
| ARGIND | 鍛戒護(hù)琛屼腑褰撳墠鏂囦歡鐨勪綅緗?浠?寮濮嬬畻)銆?/TD> |
| ARGV | 鍖呭惈鍛戒護(hù)琛屽弬鏁扮殑鏁扮粍銆?/TD> |
| CONVFMT | 鏁板瓧杞崲鏍煎紡(榛樿鍊間負(fù)%.6g) |
| ENVIRON | 鐜鍙橀噺鍏寵仈鏁扮粍銆?/TD> |
| ERRNO | 鏈鍚庝竴涓郴緇熼敊璇殑鎻忚堪銆?/TD> |
| FIELDWIDTHS | 瀛楁瀹藉害鍒楄〃(鐢ㄧ┖鏍奸敭鍒嗛殧)銆?/TD> |
| FILENAME | 褰撳墠鏂囦歡鍚嶃?/TD> |
| FNR | 鍚孨R錛屼絾鐩稿浜庡綋鍓嶆枃浠躲?/TD> |
| FS | 瀛楁鍒嗛殧絎?榛樿鏄換浣曠┖鏍?銆?/TD> |
| IGNORECASE | 濡傛灉涓虹湡錛屽垯榪涜蹇界暐澶у皬鍐欑殑鍖歸厤銆?/TD> |
| NF | 褰撳墠璁板綍涓殑瀛楁鏁般?/TD> |
| NR | 褰撳墠璁板綍鏁般?/TD> |
| OFMT | 鏁板瓧鐨勮緭鍑烘牸寮?榛樿鍊兼槸%.6g)銆?/TD> |
| OFS | 杈撳嚭瀛楁鍒嗛殧絎?榛樿鍊兼槸涓涓┖鏍?銆?/TD> |
| ORS | 杈撳嚭璁板綍鍒嗛殧絎?榛樿鍊兼槸涓涓崲琛岀)銆?/TD> |
| RLENGTH | 鐢眒atch鍑芥暟鎵鍖歸厤鐨勫瓧絎︿覆鐨勯暱搴︺?/TD> |
| RS | 璁板綍鍒嗛殧絎?榛樿鏄竴涓崲琛岀)銆?/TD> |
| RSTART | 鐢眒atch鍑芥暟鎵鍖歸厤鐨勫瓧絎︿覆鐨勭涓涓綅緗?/TD> |
| SUBSEP | 鏁扮粍涓嬫爣鍒嗛殧絎?榛樿鍊兼槸\034)銆?/TD> |
awk鎶婃瘡涓涓互鎹㈣絎︾粨鏉熺殑琛岀О涓轟竴涓褰曘?/P>
璁板綍鍒嗛殧絎︼細(xì)榛樿鐨勮緭鍏ュ拰杈撳嚭鐨勫垎闅旂閮芥槸鍥炶濺錛屼繚瀛樺湪鍐呭緩鍙橀噺ORS鍜孯S涓?/P>
$0鍙橀噺錛氬畠鎸囩殑鏄暣鏉¤褰曘傚$ awk '{print $0}' test灝嗚緭鍑簍est鏂囦歡涓殑鎵鏈夎褰曘?/P>
鍙橀噺NR錛氫竴涓鏁板櫒錛屾瘡澶勭悊瀹屼竴鏉¤褰曪紝NR鐨勫煎氨澧炲姞1銆傚$ awk '{print NR,$0}' test灝嗚緭鍑簍est鏂囦歡涓墍鏈夎褰曪紝騫跺湪璁板綍鍓嶆樉紺鴻褰曞彿銆?/P>
璁板綍涓瘡涓崟璇嶇О鍋氣滃煙鈥濓紝榛樿鎯呭喌涓嬩互絀烘牸鎴杢ab鍒嗛殧銆俛wk鍙窡韙煙鐨勪釜鏁幫紝騫跺湪鍐呭緩鍙橀噺NF涓繚瀛樿鍊箋傚$ awk '{print $1,$3}' test灝嗘墦鍗皌est鏂囦歡涓涓鍜岀涓変釜浠ョ┖鏍煎垎寮鐨勫垪(鍩?銆?/P>
鍐呭緩鍙橀噺FS淇濆瓨杈撳叆鍩熷垎闅旂鐨勫鹼紝榛樿鏄┖鏍兼垨tab銆傛垜浠彲浠ラ氳繃-F鍛戒護(hù)琛岄夐」淇敼FS鐨勫箋傚$ awk -F: '{print $1,$5}' test灝嗘墦鍗頒互鍐掑彿涓哄垎闅旂鐨勭涓錛岀浜斿垪鐨勫唴瀹廣?/P>
鍙互鍚屾椂浣跨敤澶氫釜鍩熷垎闅旂錛岃繖鏃跺簲璇ユ妸鍒嗛殧絎﹀啓鎴愭斁鍒版柟鎷彿涓紝濡?awk -F'[:\t]' '{print $1,$3}' test錛岃〃紺轟互絀烘牸銆佸啋鍙峰拰tab浣滀負(fù)鍒嗛殧絎︺?/P>
杈撳嚭鍩熺殑鍒嗛殧絎﹂粯璁ゆ槸涓涓┖鏍鹼紝淇濆瓨鍦∣FS涓傚$ awk -F: '{print $1,$5}' test錛?1鍜?5闂寸殑閫楀彿灝辨槸OFS鐨勫箋?/P>
涓鑸氱敤鐨勫厓瀛楃闆嗗氨涓嶈浜?jiǎn)锛屽彲鍙傝冩垜鐨?A target=_top>Sed鍜?A target=_top>Grep瀛︿範(fàn)絎旇銆備互涓嬪嚑涓槸gawk涓撶敤鐨勶紝涓嶉傚悎unix鐗堟湰鐨刟wk銆?/P>
鍖歸厤涓涓崟璇嶅紑澶存垨鑰呮湯灝劇殑絀哄瓧絎︿覆銆?/P>
鍖歸厤鍗曡瘝鍐呯殑絀哄瓧絎︿覆銆?/P>
鍖歸厤涓涓崟璇嶇殑寮澶寸殑絀哄瓧絎︿覆錛岄敋瀹氬紑濮嬨?/P>
鍖歸厤涓涓崟璇嶇殑鏈熬鐨勭┖瀛楃涓詫紝閿氬畾鏈熬銆?/P>
鍖歸厤涓涓瓧姣嶆暟瀛楃粍鎴愮殑鍗曡瘝銆?/P>
鍖歸厤涓涓潪瀛楁瘝鏁板瓧緇勬垚鐨勫崟璇嶃?/P>
鍖歸厤瀛楃涓插紑澶寸殑涓涓┖瀛楃涓層?/P>
鍖歸厤瀛楃涓叉湯灝劇殑涓涓┖瀛楃涓層?/P>
conditional expression1 ? expression2: expression3錛屼緥濡傦細(xì)$ awk '{max = {$1 > $3} ? $1: $3: print max}' test銆傚鏋滅涓涓煙澶т簬絎笁涓煙錛?1灝辮祴鍊肩粰max錛屽惁鍒?3灝辮祴鍊肩粰max銆?/P>
$ awk '$1 + $2 < 100' test銆傚鏋滅涓鍜岀浜屼釜鍩熺浉鍔犲ぇ浜?00錛屽垯鎵撳嵃榪欎簺琛屻?/P>
$ awk '$1 > 5 && $2 < 10' test,濡傛灉絎竴涓煙澶т簬5錛屽茍涓旂浜屼釜鍩熷皬浜?0錛屽垯鎵撳嵃榪欎簺琛屻?/P>
鑼冨洿妯℃澘鍖歸厤浠庣涓涓ā鏉跨殑絎竴嬈″嚭鐜板埌絎簩涓ā鏉跨殑絎竴嬈″嚭鐜頒箣闂存墍鏈夎銆傚鏋滄湁涓涓ā鏉挎病鍑虹幇錛屽垯鍖歸厤鍒板紑澶存垨鏈熬銆傚$ awk '/root/,/mysql/' test灝嗘樉紺簉oot絎竴嬈″嚭鐜板埌mysql絎竴嬈″嚭鐜頒箣闂寸殑鎵鏈夎銆?/P>
$ cat /etc/passwd | awk -F: '\
NF != 7{\
printf("line %d,does not have 7 fields:%s\n",NR,$0)}\
$1 !~ /[A-Za-z0-9]/{printf("line %d,non alpha and numeric user id:%d: %s\n,NR,$0)}\
$2 == "*" {printf("line %d, no password: %s\n",NR,$0)}'
$ awk '/^(no|so)/' test-----鎵撳嵃鎵鏈変互妯″紡no鎴杝o寮澶寸殑琛屻?/P>
$ awk '/^[ns]/{print $1}' test-----濡傛灉璁板綍浠鎴杝寮澶達(dá)紝灝辨墦鍗拌繖涓褰曘?/P>
$ awk '$1 ~/[0-9][0-9]$/(print $1}' test-----濡傛灉絎竴涓煙浠ヤ袱涓暟瀛楃粨鏉熷氨鎵撳嵃榪欎釜璁板綍銆?/P>
$ awk '$1 == 100 || $2 < 50' test-----濡傛灉絎竴涓垨絳変簬100鎴栬呯浜屼釜鍩熷皬浜?0錛屽垯鎵撳嵃璇ヨ銆?/P>
$ awk '$1 != 10' test-----濡傛灉絎竴涓煙涓嶇瓑浜?0灝辨墦鍗拌琛屻?/P>
$ awk '/test/{print $1 + 10}' test-----濡傛灉璁板綍鍖呭惈姝e垯琛ㄨ揪寮弔est錛屽垯絎竴涓煙鍔?0騫舵墦鍗板嚭鏉ャ?/P>
$ awk '{print ($1 > 5 ? "ok "$1: "error"$1)}' test-----濡傛灉絎竴涓煙澶т簬5鍒欐墦鍗伴棶鍙峰悗闈㈢殑琛ㄨ揪寮忓鹼紝鍚﹀垯鎵撳嵃鍐掑彿鍚庨潰鐨勮〃杈懼紡鍊箋?/P>
$ awk '/^root/,/^mysql/' test----鎵撳嵃浠ユ鍒欒〃杈懼紡root寮澶寸殑璁板綍鍒頒互姝e垯琛ㄨ揪寮弇ysql寮澶寸殑璁板綍鑼冨洿鍐呯殑鎵鏈夎褰曘傚鏋滄壘鍒頒竴涓柊鐨勬鍒欒〃杈懼紡root寮澶寸殑璁板綍錛屽垯緇х畫鎵撳嵃鐩村埌涓嬩竴涓互姝e垯琛ㄨ揪寮弇ysql寮澶寸殑璁板綍涓烘錛屾垨鍒版枃浠舵湯灝俱?/P>
鍦╝wk涓紝鍙橀噺涓嶉渶瑕佸畾涔夊氨鍙互鐩存帴浣跨敤錛屽彉閲忕被鍨嬪彲浠ユ槸鏁板瓧鎴栧瓧絎︿覆銆?/P>
璧嬪兼牸寮忥細(xì)Variable = expression錛屽$ awk '$1 ~/test/{count = $2 + $3; print count}' test,涓婂紡鐨勪綔鐢ㄦ槸,awk鍏堟壂鎻忕涓涓煙錛屼竴鏃est鍖歸厤錛屽氨鎶婄浜屼釜鍩熺殑鍊煎姞涓婄涓変釜鍩熺殑鍊鹼紝騫舵妸緇撴灉璧嬪肩粰鍙橀噺count錛屾渶鍚庢墦鍗板嚭鏉ャ?/P>
awk鍙互鍦ㄥ懡浠よ涓粰鍙橀噺璧嬪鹼紝鐒跺悗灝嗚繖涓彉閲忎紶杈撶粰awk鑴氭湰銆傚$ awk -F: -f awkscript month=4 year=2004 test錛屼笂寮忕殑month鍜寉ear閮芥槸鑷畾涔夊彉閲忥紝鍒嗗埆琚祴鍊間負(fù)4鍜?004銆傚湪awk鑴氭湰涓紝榪欎簺鍙橀噺浣跨敤璧鋒潵灝辮薄鏄湪鑴氭湰涓緩绔嬬殑涓鏍楓傛敞鎰忥紝濡傛灉鍙傛暟鍓嶉潰鍑虹幇test錛岄偅涔堝湪BEGIN璇彞涓殑鍙橀噺灝變笉鑳借浣跨敤銆?/P>
鍩熷彉閲忎篃鍙璧嬪煎拰淇敼錛屽$ awk '{$2 = 100 + $1; print }' test,涓婂紡琛ㄧず錛屽鏋滅浜屼釜鍩熶笉瀛樺湪錛宎wk灝嗚綆楄〃杈懼紡100鍔?1鐨勫鹼紝騫跺皢鍏惰祴鍊肩粰$2錛屽鏋滅浜屼釜鍩熷瓨鍦紝鍒欑敤琛ㄨ揪寮忕殑鍊艱鐩?2鍘熸潵鐨勫箋傚啀渚嬪錛? awk '$1 == "root"{$1 ="test";print}' test錛屽鏋滅涓涓煙鐨勫兼槸鈥渞oot鈥濓紝鍒欐妸瀹冭祴鍊間負(fù)鈥渢est鈥濓紝娉ㄦ剰錛屽瓧絎︿覆涓瀹氳鐢ㄥ弻寮曞彿銆?/P>
鍐呭緩鍙橀噺鐨勪嬌鐢ㄣ傚彉閲忓垪琛ㄥ湪鍓嶉潰宸插垪鍑猴紝鐜板湪涓句釜渚嬪瓙璇存槑涓涓嬨? awk -F: '{IGNORECASE=1; $1 == "MARY"{print NR,$1,$2,$NF}'test錛屾妸IGNORECASE璁句負(fù)1浠h〃蹇界暐澶у皬鍐欙紝鎵撳嵃絎竴涓煙鏄痬ary鐨勮褰曟暟銆佺涓涓煙銆佺浜屼釜鍩熷拰鏈鍚庝竴涓煙銆?/P>
BEGIN妯″潡鍚庣揣璺熺潃鍔ㄤ綔鍧楋紝榪欎釜鍔ㄤ綔鍧楀湪awk澶勭悊浠諱綍杈撳叆鏂囦歡涔嬪墠鎵ц銆傛墍浠ュ畠鍙互鍦ㄦ病鏈変換浣曡緭鍏ョ殑鎯呭喌涓嬭繘琛屾祴璇曘傚畠閫氬父鐢ㄦ潵鏀瑰彉鍐呭緩鍙橀噺鐨勫鹼紝濡侽FS,RS鍜孎S絳夛紝浠ュ強(qiáng)鎵撳嵃鏍囬銆傚錛? awk 'BEGIN{FS=":"; OFS="\t"; ORS="\n\n"}{print $1,$2,$3} test銆備笂寮忚〃紺猴紝鍦ㄥ鐞嗚緭鍏ユ枃浠朵互鍓嶏紝鍩熷垎闅旂(FS)琚涓哄啋鍙鳳紝杈撳嚭鏂囦歡鍒嗛殧絎?OFS)琚緗負(fù)鍒惰〃絎︼紝杈撳嚭璁板綍鍒嗛殧絎?ORS)琚緗負(fù)涓や釜鎹㈣絎︺? awk 'BEGIN{print "TITLE TEST"}鍙墦鍗版爣棰樸?/P>
END涓嶅尮閰嶄換浣曠殑杈撳叆鏂囦歡錛屼絾鏄墽琛屽姩浣滃潡涓殑鎵鏈夊姩浣滐紝瀹冨湪鏁翠釜杈撳叆鏂囦歡澶勭悊瀹屾垚鍚庤鎵ц銆傚$ awk 'END{print "The number of records is" NR}' test錛屼笂寮忓皢鎵撳嵃鎵鏈夎澶勭悊鐨勮褰曟暟銆?/P>
awk鍙嬌鐢╯hell鐨勯噸瀹氬悜絎﹁繘琛岄噸瀹氬悜杈撳嚭錛屽錛? awk '$1 = 100 {print $1 > "output_file" }' test銆備笂寮忚〃紺哄鏋滅涓涓煙鐨勫肩瓑浜?00錛屽垯鎶婂畠杈撳嚭鍒皁utput_file涓備篃鍙互鐢?gt;>鏉ラ噸瀹氬悜杈撳嚭錛屼絾涓嶆竻絀烘枃浠訛紝鍙仛榪藉姞鎿嶄綔銆?/P>
杈撳嚭閲嶅畾鍚戦渶鐢ㄥ埌getline鍑芥暟銆俫etline浠庢爣鍑嗚緭鍏ャ佺閬撴垨鑰呭綋鍓嶆鍦ㄥ鐞嗙殑鏂囦歡涔嬪鐨勫叾浠栬緭鍏ユ枃浠惰幏寰楄緭鍏ャ傚畠璐熻矗浠庤緭鍏ヨ幏寰椾笅涓琛岀殑鍐呭錛屽茍緇橬F,NR鍜孎NR絳夊唴寤哄彉閲忚祴鍊箋傚鏋滃緱鍒頒竴鏉¤褰曪紝getline鍑芥暟榪斿洖1錛屽鏋滃埌杈炬枃浠剁殑鏈熬灝辮繑鍥?錛屽鏋滃嚭鐜伴敊璇紝渚嬪鎵撳紑鏂囦歡澶辮觸錛屽氨榪斿洖-1銆傚錛?/P>
$ awk 'BEGIN{ "date" | getline d; print d}' test銆傛墽琛宭inux鐨刣ate鍛戒護(hù)錛屽茍閫氳繃綆¢亾杈撳嚭緇檊etline錛岀劧鍚庡啀鎶婅緭鍑?guó)櫟嬪肩粰鑷畾涔夊彉閲廳錛屽茍鎵撳嵃瀹冦?/P>
$ awk 'BEGIN{"date" | getline d; split(d,mon); print mon[2]}' test銆傛墽琛宻hell鐨刣ate鍛戒護(hù)錛屽茍閫氳繃綆¢亾杈撳嚭緇檊etline錛岀劧鍚巊etline浠庣閬撲腑璇誨彇騫跺皢杈撳叆璧嬪肩粰d錛宻plit鍑芥暟鎶婂彉閲廳杞寲鎴愭暟緇刴on錛岀劧鍚庢墦鍗版暟緇刴on鐨勭浜屼釜鍏冪礌銆?/P>
$ awk 'BEGIN{while( "ls" | getline) print}'錛屽懡浠s鐨勮緭鍑轟紶閫掔粰geline浣滀負(fù)杈撳叆錛屽驚鐜嬌getline浠巐s鐨勮緭鍑轟腑璇誨彇涓琛岋紝騫舵妸瀹冩墦鍗板埌灞忓箷銆傝繖閲屾病鏈夎緭鍏ユ枃浠訛紝鍥犱負(fù)BEGIN鍧楀湪鎵撳紑杈撳叆鏂囦歡鍓嶆墽琛岋紝鎵浠ュ彲浠ュ拷鐣ヨ緭鍏ユ枃浠躲?/P>
$ awk 'BEGIN{printf "What is your name?"; getline name < "/dev/tty" } $1 ~name {print "Found" name on line ", NR "."} END{print "See you," name "."} test銆傚湪灞忓箷涓婃墦鍗扳漌hat is your name?",騫剁瓑寰呯敤鎴峰簲絳斻傚綋涓琛岃緭鍏ュ畬姣曞悗錛実etline鍑芥暟浠庣粓绔帴鏀惰琛岃緭鍏ワ紝騫舵妸瀹冨偍瀛樺湪鑷畾涔夊彉閲弉ame涓傚鏋滅涓涓煙鍖歸厤鍙橀噺name鐨勫鹼紝print鍑芥暟灝辮鎵ц錛孍ND鍧楁墦鍗癝ee you鍜宯ame鐨勫箋?/P>
$ awk 'BEGIN{while (getline < "/etc/passwd" > 0) lc++; print lc}'銆俛wk灝嗛愯璇誨彇鏂囦歡/etc/passwd鐨勫唴瀹癸紝鍦ㄥ埌杈炬枃浠舵湯灝懼墠錛岃鏁板櫒lc涓鐩村鍔狅紝褰撳埌鏈熬鏃訛紝鎵撳嵃l(fā)c鐨勫箋傛敞鎰忥紝濡傛灉鏂囦歡涓嶅瓨鍦紝getline榪斿洖-1錛屽鏋滃埌杈炬枃浠剁殑鏈熬灝辮繑鍥?錛屽鏋滆鍒頒竴琛岋紝灝辮繑鍥?錛屾墍浠ュ懡浠? while (getline < "/etc/passwd")鍦ㄦ枃浠朵笉瀛樺湪鐨勬儏鍐典笅灝嗛櫡鍏ユ棤闄愬驚鐜紝鍥犱負(fù)榪斿洖-1琛ㄧず閫昏緫鐪熴?/P>
鍙互鍦╝wk涓墦寮涓涓閬擄紝涓斿悓涓鏃跺埢鍙兘鏈変竴涓閬撳瓨鍦ㄣ傞氳繃close()鍙叧闂閬撱傚錛? awk '{print $1, $2 | "sort" }' test END {close("sort")}銆俛wd鎶妏rint璇彞鐨勮緭鍑洪氳繃綆¢亾浣滀負(fù)linux鍛戒護(hù)sort鐨勮緭鍏?END鍧楁墽琛屽叧闂閬撴搷浣溿?/P>
system鍑芥暟鍙互鍦╝wk涓墽琛宭inux鐨勫懡浠ゃ傚錛? awk 'BEGIN{system("clear")'銆?/P>
fflush鍑芥暟鐢ㄤ互鍒鋒柊杈撳嚭緙撳啿鍖猴紝濡傛灉娌℃湁鍙傛暟錛屽氨鍒鋒柊鏍囧噯杈撳嚭鐨勭紦鍐插尯錛屽鏋滀互絀哄瓧絎︿覆涓哄弬鏁幫紝濡俧flush(""),鍒欏埛鏂版墍鏈夋枃浠跺拰綆¢亾鐨勮緭鍑虹紦鍐插尯銆?/P>
awk涓殑鏉′歡璇彞鏄粠C璇█涓熼壌榪囨潵鐨勶紝鍙帶鍒剁▼搴忕殑嫻佺▼銆?/P>
鏍煎紡錛?
{if (expression){
statement; statement; ...
}
}
$ awk '{if ($1 <$2) print $2 "too high"}' test銆傚鏋滅涓涓煙灝忎簬絎簩涓煙鍒欐墦鍗般?/P>
$ awk '{if ($1 < $2) {count++; print "ok"}}' test.濡傛灉絎竴涓煙灝忎簬絎簩涓煙錛屽垯count鍔犱竴錛屽茍鎵撳嵃ok銆?/P>
鏍煎紡錛?
{if (expression){
statement; statement; ...
}
else{
statement; statement; ...
}
}
$ awk '{if ($1 > 100) print $1 "bad" ; else print "ok"}' test銆傚鏋?1澶т簬100鍒欐墦鍗?1 bad,鍚﹀垯鎵撳嵃ok銆?/P>
$ awk '{if ($1 > 100){ count++; print $1} else {count--; print $2}' test銆傚鏋?1澶т簬100錛屽垯count鍔犱竴錛屽茍鎵撳嵃$1錛屽惁鍒檆ount鍑忎竴錛屽茍鎵撳嵃$1銆?/P>
awk鏈変笁縐嶅驚鐜?while寰幆錛沠or寰幆錛泂pecial for寰幆銆?/P>
$ awk '{ i = 1; while ( i <= NF ) { print NF,$i; i++}}' test銆傚彉閲忕殑鍒濆鍊間負(fù)1錛岃嫢i灝忎簬鍙瓑浜嶯F(璁板綍涓煙鐨勪釜鏁?,鍒欐墽琛屾墦鍗拌鍙ワ紝涓攊澧炲姞1銆傜洿鍒癷鐨勫煎ぇ浜嶯F.
$ awk '{for (i = 1; i<NF; i++) print NF,$i}' test銆備綔鐢ㄥ悓涓娿?/P>
breadkcontinue璇彞銆俠reak鐢ㄤ簬鍦ㄦ弧瓚蟲潯浠剁殑鎯呭喌涓嬭煩鍑哄驚鐜紱continue鐢ㄤ簬鍦ㄦ弧瓚蟲潯浠剁殑鎯呭喌涓嬪拷鐣ュ悗闈㈢殑璇彞錛岀洿鎺ヨ繑鍥炲驚鐜殑欏剁銆傚錛?/P>
{for ( x=3; x<=NF; x++)
if ($x<0){print "Bottomed out!"; break}}
{for ( x=3; x<=NF; x++)
if ($x==0){print "Get next item"; continue}}
next璇彞浠庤緭鍏ユ枃浠朵腑璇誨彇涓琛岋紝鐒跺悗浠庡ご寮濮嬫墽琛宎wk鑴氭湰銆傚錛?/P>
{if ($1 ~/test/){next}
else {print}
}
exit璇彞鐢ㄤ簬緇撴潫awk紼嬪簭錛屼絾涓嶄細(xì)鐣ヨ繃END鍧椼傞鍑虹姸鎬佷負(fù)0浠h〃鎴愬姛錛岄潪闆跺艱〃紺哄嚭閿欍?/P>
awk涓殑鏁扮粍鐨勪笅鏍囧彲浠ユ槸鏁板瓧鍜屽瓧姣嶏紝縐頒負(fù)鍏寵仈鏁扮粍銆?/P>
鐢ㄥ彉閲忎綔涓烘暟緇勪笅鏍囥傚錛? awk {name[x++]=$2};END{for(i=0;i<NR;i++) print i,name[i]}' test銆傛暟緇刵ame涓殑涓嬫爣鏄竴涓嚜瀹氫箟鍙橀噺x錛宎wk鍒濆鍖杧鐨勫間負(fù)0錛屽湪姣忔浣跨敤鍚庡鍔?銆傜浜屼釜鍩熺殑鍊艱璧嬬粰name鏁扮粍鐨勫悇涓厓绱犮傚湪END妯″潡涓紝for寰幆琚敤浜庡驚鐜暣涓暟緇勶紝浠庝笅鏍囦負(fù)0鐨勫厓绱犲紑濮嬶紝鎵撳嵃閭d簺瀛樺偍鍦ㄦ暟緇勪腑鐨勫箋傚洜涓轟笅鏍囨槸鍏沖仴瀛楋紝鎵浠ュ畠涓嶄竴瀹氫粠0寮濮嬶紝鍙互浠庝換浣曞煎紑濮嬨?/P>
special for寰幆鐢ㄤ簬璇誨彇鍏寵仈鏁扮粍涓殑鍏冪礌銆傛牸寮忓涓嬶細(xì)
{for (item in arrayname){
print arrayname[item]
}
}
$ awk '/^tom/{name[NR]=$1}; END{for(i in name){print name[i]}}'
test銆傛墦鍗版湁鍊肩殑鏁扮粍鍏冪礌銆傛墦鍗扮殑欏哄簭鏄殢鏈虹殑銆?
鐢ㄥ瓧絎︿覆浣滀負(fù)涓嬫爣銆傚錛歝ount["test"]
鐢ㄥ煙鍊間綔涓烘暟緇勭殑涓嬫爣銆備竴縐嶆柊鐨刦or寰幆鏂瑰紡錛宖or (index_value in array) statement銆傚:$ awk '{count[$1]++} END{for(name in count) print name,count[name]}' test銆傝璇彞灝嗘墦鍗?1涓瓧絎︿覆鍑虹幇鐨勬鏁般傚畠棣栧厛浠ョ涓涓煙浣滄暟緇刢ount鐨勪笅鏍囷紝絎竴涓煙鍙樺寲錛岀儲(chǔ)寮曞氨鍙樺寲銆?/P>
delete鍑芥暟鐢ㄤ簬鍒犻櫎鏁扮粍鍏冪礌銆傚錛? awk '{line[x++]=$1} END{for(x in line) delete(line[x])}' test銆傚垎閰嶇粰鏁扮粍line鐨勬槸絎竴涓煙鐨勫鹼紝鎵鏈夎褰曞鐞嗗畬鎴愬悗錛宻pecial for寰幆灝嗗垹闄ゆ瘡涓涓厓绱犮?/P>
sub鍑芥暟鍖歸厤璁板綍涓渶澶с佹渶闈犲乏杈圭殑瀛愬瓧絎︿覆鐨勬鍒欒〃杈懼紡錛屽茍鐢ㄦ浛鎹㈠瓧絎︿覆鏇挎崲榪欎簺瀛楃涓層傚鏋滄病鏈夋寚瀹氱洰鏍囧瓧絎︿覆灝遍粯璁や嬌鐢ㄦ暣涓褰曘傛浛鎹㈠彧鍙戠敓鍦ㄧ涓嬈″尮閰嶇殑鏃跺欍傛牸寮忓涓嬶細(xì)
sub (regular expression, substitution string):
sub (regular expression, substitution string, target string)
瀹炰緥錛?/P>
$ awk '{ sub(/test/, "mytest"); print }' testfile
$ awk '{ sub(/test/, "mytest"); $1}; print }' testfile
絎竴涓緥瀛愬湪鏁翠釜璁板綍涓尮閰嶏紝鏇挎崲鍙彂鐢熷湪絎竴嬈″尮閰嶅彂鐢熺殑鏃跺欍傚瑕佸湪鏁翠釜鏂囦歡涓繘琛屽尮閰嶉渶瑕佺敤鍒癵sub
絎簩涓緥瀛愬湪鏁翠釜璁板綍鐨勭涓涓煙涓繘琛屽尮閰嶏紝鏇挎崲鍙彂鐢熷湪絎竴嬈″尮閰嶅彂鐢熺殑鏃跺欍?/P>
gsub鍑芥暟浣滅敤濡俿ub錛屼絾瀹冨湪鏁翠釜鏂囨。涓繘琛屽尮閰嶃傛牸寮忓涓嬶細(xì)
gsub (regular expression, substitution string)
gsub (regular expression, substitution string, target string)
瀹炰緥錛?/P>
$ awk '{ gsub(/test/, "mytest"); print }' testfile
$ awk '{ gsub(/test/, "mytest"), $1 }; print }' testfile
絎竴涓緥瀛愬湪鏁翠釜鏂囨。涓尮閰峵est錛屽尮閰嶇殑閮借鏇挎崲鎴恗ytest銆?/P>
絎簩涓緥瀛愬湪鏁翠釜鏂囨。鐨勭涓涓煙涓尮閰嶏紝鎵鏈夊尮閰嶇殑閮借鏇挎崲鎴恗ytest銆?/P>
index鍑芥暟榪斿洖瀛愬瓧絎︿覆絎竴嬈¤鍖歸厤鐨勪綅緗紝鍋忕Щ閲忎粠浣嶇疆1寮濮嬨傛牸寮忓涓嬶細(xì)
index(string, substring)
瀹炰緥錛?/P>
$ awk '{ print index("test", "mytest") }' testfile
瀹炰緥榪斿洖test鍦╩ytest鐨勪綅緗紝緇撴灉搴旇鏄?銆?/P>
length鍑芥暟榪斿洖璁板綍鐨勫瓧絎︽暟銆傛牸寮忓涓嬶細(xì)
length( string )
length
瀹炰緥錛?/P>
$ awk '{ print length( "test" ) }'
$ awk '{ print length }' testfile
絎竴涓疄渚嬭繑鍥瀟est瀛楃涓茬殑闀垮害銆?/P>
絎簩涓疄渚嬭繑鍥瀟estfile鏂囦歡涓鏉¤褰曠殑瀛楃鏁般?/P>
substr鍑芥暟榪斿洖浠庝綅緗?寮濮嬬殑瀛愬瓧絎︿覆錛屽鏋滄寚瀹氶暱搴﹁秴榪囧疄闄呴暱搴︼紝灝辮繑鍥炴暣涓瓧絎︿覆銆傛牸寮忓涓嬶細(xì)
substr( string, starting position )
substr( string, starting position, length of string )
瀹炰緥錛?/P>
$ awk '{ print substr( "hello world", 7,11 ) }'
涓婁緥鎴彇浜?jiǎn)world瀛愬瓧絎︿覆銆?/P>
match鍑芥暟榪斿洖鍦ㄥ瓧絎︿覆涓鍒欒〃杈懼紡浣嶇疆鐨勭儲(chǔ)寮曪紝濡傛灉鎵句笉鍒版寚瀹氱殑姝e垯琛ㄨ揪寮忓垯榪斿洖0銆俶atch鍑芥暟浼?xì)璁揪|唴寤哄彉閲廟START涓哄瓧絎︿覆涓瓙瀛楃涓茬殑寮濮嬩綅緗紝RLENGTH涓哄埌瀛愬瓧絎︿覆鏈熬鐨勫瓧絎︿釜鏁般俿ubstr鍙埄浜庤繖浜涘彉閲忔潵鎴彇瀛楃涓層傚嚱鏁版牸寮忓涓嬶細(xì)
match( string, regular expression )
瀹炰緥錛?/P>
$ awk '{start=match("this is a test",/[a-z]+$/); print start}'
$ awk '{start=match("this is a test",/[a-z]+$/); print start, RSTART, RLENGTH }'
絎竴涓疄渚嬫墦鍗頒互榪炵畫灝忓啓瀛楃緇撳熬鐨勫紑濮嬩綅緗紝榪欓噷鏄?1銆?/P>
絎簩涓疄渚嬭繕鎵撳嵃RSTART鍜孯LENGTH鍙橀噺錛岃繖閲屾槸11(start)錛?1(RSTART)錛?(RLENGTH)銆?/P>
toupper鍜宼olower鍑芥暟鍙敤浜庡瓧絎︿覆澶у皬闂寸殑杞崲錛岃鍔熻兘鍙湪gawk涓湁鏁堛傛牸寮忓涓嬶細(xì)
toupper( string )
tolower( string )
瀹炰緥錛?/P>
$ awk '{ print toupper("test"), tolower("TEST") }'
split鍑芥暟鍙寜緇欏畾鐨勫垎闅旂鎶婂瓧絎︿覆鍒嗗壊涓轟竴涓暟緇勩傚鏋滃垎闅旂娌℃彁渚涳紝鍒欐寜褰撳墠FS鍊艱繘琛屽垎鍓層傛牸寮忓涓嬶細(xì)
split( string, array, field separator )
split( string, array )
瀹炰緥錛?/P>
$ awk '{ split( "20:18:00", time, ":" ); print time[2] }'
涓婁緥鎶婃椂闂存寜鍐掑彿鍒嗗壊鍒皌ime鏁扮粍鍐咃紝騫舵樉紺虹浜屼釜鏁扮粍鍏冪礌18銆?/P>
systime鍑芥暟榪斿洖浠?970騫?鏈?鏃ュ紑濮嬪埌褰撳墠鏃墮棿(涓嶈闂板勾)鐨勬暣縐掓暟銆傛牸寮忓涓嬶細(xì)
systime()
瀹炰緥錛?/P>
$ awk '{ now = systime(); print now }'
strftime鍑芥暟浣跨敤C搴撲腑鐨剆trftime鍑芥暟鏍煎紡鍖栨椂闂淬傛牸寮忓涓嬶細(xì)
systime( [format specification][,timestamp] )
Table 3. 鏃ユ湡鍜屾椂闂存牸寮忚鏄庣
| 鏍煎紡 | 鎻忚堪 |
|---|---|
| %a | 鏄熸湡鍑犵殑緙╁啓(Sun) |
| %A | 鏄熸湡鍑犵殑瀹屾暣鍐欐硶(Sunday) |
| %b | 鏈堝悕鐨勭緝鍐?Oct) |
| %B | 鏈堝悕鐨勫畬鏁村啓娉?October) |
| %c | 鏈湴鏃ユ湡鍜屾椂闂?/TD> |
| %d | 鍗佽繘鍒舵棩鏈?/TD> |
| %D | 鏃ユ湡 08/20/99 |
| %e | 鏃ユ湡錛屽鏋滃彧鏈変竴浣嶄細(xì)琛ヤ笂涓涓┖鏍?/TD> |
| %H | 鐢ㄥ崄榪涘埗琛ㄧず24灝忔椂鏍煎紡鐨勫皬鏃?/TD> |
| %I | 鐢ㄥ崄榪涘埗琛ㄧず12灝忔椂鏍煎紡鐨勫皬鏃?/TD> |
| %j | 浠?鏈?鏃ヨ搗涓騫翠腑鐨勭鍑犲ぉ |
| %m | 鍗佽繘鍒惰〃紺虹殑鏈堜喚 |
| %M | 鍗佽繘鍒惰〃紺虹殑鍒嗛挓 |
| %p | 12灝忔椂琛ㄧず娉?AM/PM) |
| %S | 鍗佽繘鍒惰〃紺虹殑縐?/TD> |
| %U | 鍗佽繘鍒惰〃紺虹殑涓騫翠腑鐨勭鍑犱釜鏄熸湡(鏄熸湡澶╀綔涓轟竴涓槦鏈熺殑寮濮? |
| %w | 鍗佽繘鍒惰〃紺虹殑鏄熸湡鍑?鏄熸湡澶╂槸0) |
| %W | 鍗佽繘鍒惰〃紺虹殑涓騫翠腑鐨勭鍑犱釜鏄熸湡(鏄熸湡涓浣滀負(fù)涓涓槦鏈熺殑寮濮? |
| %x | 閲嶆柊璁劇疆鏈湴鏃ユ湡(08/20/99) |
| %X | 閲嶆柊璁劇疆鏈湴鏃墮棿(12錛?0錛?0) |
| %y | 涓や綅鏁板瓧琛ㄧず鐨勫勾(99) |
| %Y | 褰撳墠鏈堜喚 |
| %Z | 鏃跺尯(PDT) |
| %% | 鐧懼垎鍙?%) |
瀹炰緥錛?/P>
$ awk '{ now=strftime( "%D", systime() ); print now }'
$ awk '{ now=strftime("%m/%d/%y"); print now }'