首頁 > php教程 > PHP开发 > AWK指令詳解(大全)

AWK指令詳解(大全)

高洛峰
發布: 2016-12-15 10:41:24
原創
1744 人瀏覽過

什麼是awk? 

你可能對UNIX比較熟悉,但你可能對awk很陌生,這一點也不奇怪,的確,與其優秀的功能相比,awk還遠遠沒有達到它應有的知名度。 awk是什麼?與其它大多數UNIX命令不同的是,從名字上看,我們不可能知道awk的功能:它既不是具有獨立意義的英文單詞,也不是幾個相關單詞的縮寫。事實上,awk是三個人名的縮寫,他們是:Aho、(Peter)Weinberg和(Brain)Kernighan。正是這三個人創造了awk---一個優秀的樣式掃描與處理工具。 

AWK的功能是什麼?與sed和grep很相似,awk是一種樣式掃描與處理工具。但其功能卻大大強於sed和grep。 awk提供了極其強大的功能:它幾乎可以完成grep和sed所能完成的全部工作,同時,它還可以進行樣式裝入、流控制、數學運算符、進程控制語句甚至於內置的變量和函數。它具備了一個完整的語言所應具有的幾乎所有精美特性。實際上,awk的確擁有自己的語言:awk程式設計語言,awk的三位創作者已將它正式定義為:樣式掃描和處理語言。

為什麼使用awk? 

即使如此,你也許仍然會問,我為什麼要使用awk? 

使用awk的第一個理由是基於文本的樣式掃描和處理是我們經常做的工作,awk的工作有些象資料庫,但與資料庫不同的是,它處理的是文字文件,這些文件沒有專門的儲存格式,普通的人們就能編輯、閱讀、理解和處理它們。而資料庫檔案往往具有特殊的儲存格式,這使得它們必須用資料庫處理程序來處理它們。既然這種類似資料庫的處理工作我們常常會遇到,我們就應該找到處理它們的簡單易行的方法,UNIX有很多這方面的工具,例如sed 、grep、sort以及find等等,awk是其中十分優秀的一種。 

使用awk的第二個理由是awk是一個簡單的工具,當然這是相對於其強大的功能來說的。的確,UNIX有許多優秀的工具,例如UNIX天然的開發工具C語言及其延續C++就非常的優秀。但相對於它​​們來說,awk完成同樣的功能要方便和簡捷得多。這首先是因為awk提供了適應多種需求的解決方案:從解決簡單問題的awk命令列到複雜而精巧的awk程式設計語言,這樣做的好處是,你可以不必用複雜的方法去解決本來很簡單的問題。例如,你可以用一個命令列解決簡單的問題,而C不行,即使一個再簡單的程序,C語言也必須經過編寫、編譯的全過程。其次,awk本身是解釋執行的,這使得awk程式不必經過編譯的過程,同時,這也使得它與shell script程式能夠很好的契合。最後,awk本身較C語言簡單,雖然awk吸收了C語言很多優秀的成分,熟悉C語言會對學習awk有很大的幫助,但awk本身不須要會使用C語言――一種功能強大但需要大量時間學習才能掌握其技巧的開發工具。 

使用awk的第三個理由是awk是一個容易取得的工具。與C和C++語言不同,awk只有一個檔案(/bin/awk),而且幾乎每個版本的UNIX都提供各自版本的awk,你完全不必費心去想如何取得awk。但C語言卻不是這樣,雖然C語言是UNIX天然的開發工具,但這個開發工具卻是單獨發行的,換言之,你必須為你的UNIX版本的C語言開發工具單獨付費(當然使用D版者除外),獲得並安裝它,然後你才可以使用它。 

基於上述理由,再加上awk強大的功能,我們有理由說,如果你要處理與文字樣式掃描相關的工作,awk應該是你的第一選擇。這裡有一個可遵循的一般原則:如果你用普通的shell工具或shell script有困難的話,試試awk,如果awk仍不能解決問題,則便用C語言,如果C語言仍然失敗,則移至C++。

awk的調用方式 

前面曾經說過,awk提供了適應多種需要的不同解決方案,它們是: 

一、awk命令行,你可以像使用普通UNIX命令一樣使用awk,在命令行中你也可以使用awk程式設計語言,雖然awk支援多行的錄入,但是錄入長長的命令行並保證其正確無誤卻是一件令人頭疼的事,因此,這種方法一般只用於解決簡單的問題。當然,你也可以在shell script程式中引用awk命令列甚至awk程式腳本。 

二、使用-f選項呼叫awk程式。 awk允許將一段awk程式寫入一個文字文件,然後在awk命令列中用-f選項呼叫並執行這段程式。具體的方法我們將在後面的awk文法中講到。 

三、利用指令解釋器呼叫awk程式:利用UNIX支援的指令解釋器功能,我們可以將一段awk程式寫入文字文件,然後在它的第一行加上: 
#!/bin/awk -f 
並賦予這個文字檔案執行的權限。這樣做之後,你就可以在命令列中用類似於下面這樣的方式呼叫並執行這段awk程式了。

$awk腳本文字名待處理檔案 

awk的語法: 

與其它UNIX指令一樣,awk擁有自己的語法: 

awk [ -F re] [parameter...] ['prog'] ['prog'] ['prog'] ['prog'] -f progfile][in_file...] 

參數說明: 

-F re:允許awk變更其欄位分隔符號。 

parameter: 此參數幫助為不同的變數賦值。 

'prog': awk的程式語句段。這個語句段必須用單拓號:'和'括起,以防被shell解釋。這個程式語句段的標準形式為: 

'pattern {action}' 

其中pattern參數可以是egrep正規表示式中的任何一個,它可以使用語法/re/再加上一些樣式匹配技巧構成。與sed類似,你也可以使用","分開兩個樣式以選擇某個範圍。關於配對的細節,你可以參考附錄,如果仍不懂的話,找本UNIX書學學grep和sed(本人是在學習ed時掌握匹配技術的)。 action參數總是被大括號包圍,它由一系統awk語句組成,各語句之間用";"分隔。 awk解釋它們,並在pattern給定的樣式匹配的記錄上執行其操作。與shell類似,你也可以使用「#」作為註解符,它使「#」到行尾的內容成為註釋,在解釋執行時,它們將被忽略。你可以省略pattern和action之一,但不能兩者同時省略,當省略pattern時沒有樣式匹配,表示對所有行(記錄)均執行操作,省略action時執行缺省的操作――在標準輸出上顯示。 

-f progfile:允許awk呼叫並執行progfile指定有程式檔案。 progfile是一個文字文件,他必須符合awk的語法。 

in_file:awk的輸入文件,awk允許對多個輸入檔進行處理。值得注意的是awk不修改輸入檔。如果未指定輸入文件,awk將接受標準輸入,並將結果顯示在標準輸出上。 awk支援輸入輸出重定向。

awk的記錄、字段與內建變數: 

前面說過,awk處理的工作與資料庫的處理方式有相同之處,其相同處之一就是awk支援對記錄和字段的處理,其中對字段的處理是grep和sed不能實現的,這也是awk優於二者的原因之一。在awk中,缺省的情況下總是將文字檔案中的一行視為一個記錄,而將一行中的某一部分作為記錄中的一個欄位。為了操作這些不同的字段,awk借用shell的方法,用$1,$2,$3...這樣的方式來順序地表示行(記錄)中的不同字段。特殊地,awk用$0表示整個行(記錄)。不同的欄位之間是用稱作分隔符號的字元分隔開的。系統預設的分隔符是空格。 awk允許在命令列中用-F re的形式來改變這個分隔符號。事實上,awk用一個內建的變數FS來記憶這個分隔符號。 awk中有好幾個這樣的內建變量,例如,記錄分隔符號變數RS、目前工作的記錄數NR等等,本文後面的附表列出了全部的內建變數。這些內建的變數可以在awk程式中引用或修改,例如,你可以利用NR變數在模式匹配中指定工作範圍,也可以透過修改記錄分隔符號RS讓一個特殊字元而不是換行符作為記錄的分隔符號。

例:顯示文字檔案myfile中第七行到第十五行中以字元%分隔的第一字段,第三字段和第七字段: 

awk -F % 'NR==7,NR==15 {printf $1 $3 $7}' 

awk的內建函數 

awk之所以成為優秀的程式設計語言的原因之一是它吸收了某些優秀的程式設計語言(例如C)語言的許多優點。這些優點之一就是內建函數的使用,awk定義並支援了一系列的內建函數,由於這些函數的使用,使得awk提供的功能更為完善和強大,例如,awk使用了一系列的字串處理內置函數(這些函數看起來與C語言的字串處理函數相似,其使用方式與C語言中的函數也相差無幾),正是由於這些內建函數的使用,使awk處理字串的功能更加強大。本文後面的附錄中列有一般的awk所提供的內建函數,這些內建函數也許與你的awk版本有些出入,因此,在使用之前,最好參考一下你的系統中的線上幫助。 

作為內建函數的例子,我們將在這裡介紹awk的printf函數,這個函數使得awk與c語言的輸出相符。實際上,awk中有許多引用形式都是從C語言借用過來的。如果你熟悉C語言,你也許會記得其中的printf函數,它提供的強大格式輸出功能曾經帶我們許多的方便。幸運的是,我們在awk中又和它重逢了。 awk中printf幾乎與C語言中一模一樣,如果你熟悉C語言的話,你完全可以按照C語言的模式使用awk中的printf。因此在這裡,我們只給一個例子,如果你不熟悉的話,請隨便找一本C語言的入門書翻翻。

例:顯示檔案myfile中的行號和第3欄位: 

$awk '{printf"%03d%s",NR,$1}' myfile 

在命令列使用awk 講解awk程式設計的內容了,但在講解之前,我們將用一些例子來對前面的知識進行回顧,這些例子都是在命令列中使用的,由此我們可以知道在命令列中使用awk是多麼的方便。這樣做的原因一方面是為下面的內容作鋪墊,另一方面是介紹一些解決簡單問題的方法,我們完全沒有必要用複雜的方法來解決簡單的問題----既然awk提供了較為簡單的方法的話。 

例:顯示文字檔案mydoc符合(含)字串"sun"的所有行。 

$awk '/sun/{print}' mydoc 

由於顯示整個記錄(全行)是awk的缺省動作,因此可以省略action項。

$awk '/sun/' mydoc 

例:下面是一個較為複雜的匹配的例子: 

$awk '/[Ss]un/,/[Mm]oon/ {print}' my 


將顯示第一個符合Sun或sun的行與第一個符合Moon或moon的行之間的行,並顯示到標準輸出。

例:下面的範例顯示了內建變數和內建函數length()的使用: 

$awk 'length($0)>80 {print NR}' myfile 

該命令列將顯示文字myfile中所有超過80個字元的行號,在這裡,用$0表示整個記錄(行),同時,內建變數NR不使用標誌符'$'。

例:作為一個較為實際的例子,我們假設要對UNIX中的用戶進行安全性檢查,方法是考察/etc下的passwd文件,檢查其中的passwd字段(第二字段)是否為"*",如不為"*",則表示該使用者沒有設定密碼,顯示出這些使用者名稱(第一個欄位)。我們可以用下列語句實作: 

#awk -F: '$2=="" {printf("%s no password!",$1' /etc/passwd 

在這個範例中,passwd檔案的欄位分隔符是“:”,因此,必須用-F:來更改預設的字段分隔符,這個示例中也涉及到了內置函數printf的使用。語言中設定變量,事實上,提供變數的功能是程式設計語言的其本要求,不提供變數的程式設計語言本人還從未見過。 ,這前面我們已經講過,需要著重指出的是,與後面提到的其它變量不同的是,在awk程序中引用內置變量不需要使用標誌符"$"(回憶一下前面講過的NR的使用)。變數必須在它前面加上標誌符號"$"。當變數類型不確定時,awk預設為字串類型。在後面的實例中,我們將用到這個技巧。本相同:如+、-、*、/、%等等,同時,awk也支援C語言中類似++、--、+=、-=、=+、=-之類的功能,這給熟悉C語言的使用者編寫awk程式帶來了極大的方便。於對字串進行操作(運算)的函數(如length、substr等等)。作為條件轉移指令的一部分,關係判斷是每種程式設計語言都具備的功能,awk也不例外。 awk中允許多種測試,如常用的==(等於)、! =(不等於)、>(大於)、=(大於等於)、>=(小於等於)等等,同時,作為樣式匹配,還提供了~(匹配於)和! ~(不符合)判斷。 

作為測試的一種擴充,awk也支援用邏輯運算子:!(非)、&&(與)、||(或)和括號()進行多重判斷,這大大增強了awk的功能。本文的附錄中列出了awk所允許的運算、判斷以及操作符的優先順序。 

awk的流程控制 

流程控制語句是任何程式設計語言都不能缺少的部分。任何好的語言都有一些執行流程控制的語句。 awk提供的完整的流程控制語句類似C語言,這為我們程式設計帶來了極大的便利。

1、BEGIN和END: 

在awk中兩個特別的表達式,BEGIN和END,這兩者都可用於pattern中(參考前面的awk語法),提供BEGIN和END的作用是給程式賦予初始狀態和在程式結束之後執行一些掃尾的工作。任何在BEGIN之後列出的操作(在{}內)將在awk開始掃描輸入之前執行,而END之後列出的操作將在掃描完全部的輸入之後執行。因此,通常使用BEGIN來顯示變數和預置(初始化)變量,使用END輸出最終結果。

例:累計銷售文件xs中的銷售金額(假設銷售金額在記錄的第三字段): 

$awk 
>'BEGIN { FS=":";print "統計銷售金額";total=0}
>{print $3;total=total+$3;} 
>END {printf "銷售金額總計:%.2f",total}' sx 
(註:>是shell提供的第二個提示符,如要在shell程式awk語句和awk語言中換行,則需在行尾加上反斜線) 

在這裡,BEGIN預置了內部變數FS(字段分隔符號)和自訂變數total,同時在掃描之前顯示輸出行頭。而END則在掃描完成後列印出總合計。 

2、流程控制語句 
awk提供了完整的流程控制語句,其用法與C語言類似。下面我們一一加說明: 

2.1、if...else語句: 

格式: 
if(表達式) 
語句1 
else 
語句2 
語句1 
else 
語句2 
語句可以中"如果你為了方便awk判斷也方便你自已閱讀,你最好將多個語句用{}括起來。 awk分枝結構允許嵌套,其格式為: 

if(表達式1) 
{if(表達式2) 
語句1 
else 
語句2 

語句3 式表達式3 
語句4 
else 
語句5 

語句6 

當然實際操作過程中你可能不會用到如此複雜的分枝結構,這裡只是為了給出其樣式罷了。

2.2、while語句 

格式為: 

while(表達式) 
語句 

2.3、do-while語句鎠while(條件判斷語句) 

2.4、for語句 

格式為: 

for(初始表達式;終止條件;步長表達式) 
{語句} 

在awk的while、do-while和for語句中允許語句中允許使用語句來控制流程走向,也允許使用exit這樣的語句來退出。 break中斷目前正在執行的迴圈並跳到迴圈外執行下一語句。 continue從目前位置跳到迴圈開始處執行。對於exit的執行有兩種情況:當exit語句不在END中時,任何操作中的exit命令表現得如同到了文件尾,所有模式或操作執行將停止,END模式中的操作被執行。而出現在END中的exit將導致程式終止。

例:為了 

awk中的自訂函數 

定義和調用使用者自己的函數是幾乎每個高階語言都具有的功能,awk也不例外,但原始的awk並不提供函數功能,只有在nawk或較新的awk版本才可以增加函數。 

函數的使用包含兩個部分:函數的定義與函數呼叫。其中函數定義又包含要執行的程式碼(函數本身)和從主程式碼傳遞到該函數的臨時呼叫。 

awk函數的定義方法如下: 

function 函數名稱(參數表){ 
函數體 


在gawk中允許將function省略為func,但其它版本的awk不允許。函數名稱必須是合法的標誌符,參數表中可以不提供參數(但在呼叫函數時函數名後的一對括號仍然是不可缺少的),也可以提供一個或多個參數。與C語言相似,awk的參數也是透過值來傳遞的。 

在awk中呼叫函數較簡單,其方法與C語言相似,但awk比C語言較為靈活,它不執行參數有效性檢查。換句話說,當你呼叫函數時,可以列出比函數預期(函數定義中規定)的多或少的參數,多餘的參數會被awk所忽略,而不足的參數,awk將它們置為缺省值0或空字串,具體置為何值,將取決於參數的使用方式。 

awk函數有兩種回傳方式:隱式回傳和明確回傳。當awk執行到函數的結尾時,它會自動地回到呼叫程序,這是函數是隱式傳回的。如果需要在結束之前退出函數,可以明確地使用返回語句提前退出。方法是在函數中使用形如:return 傳回值 格式的語句。 

例:下面的範例示範了函數的使用。在這個範例中,定義了一個名為print_header的函數,該函數呼叫了兩個參數FileName和PageNum,FileName參數傳給函數目前使用的檔案名,PageNum參數是目前頁的頁號。這個函數的功能是列印(顯示)出目前檔案的檔案名,和目前頁的頁號。完成這個功能後,這個函數將會傳回下一頁的頁號。

nawk 
>'BEGIN{pageno=1;file=FILENAME 
>pageno=print_header(file,pageno);#呼叫函數print_header 
>printf("目前頁頁編號是:%d",pagenodo); } 

>#定義函數print_header 
>function print_header(FileName,PageNum){ 
>printf("%s %d",FileName,PageNum); >PageNum++;return PageNUm;執行此程式會顯示以下內容: 

myfile 1 
目前頁頁號碼是:2 

awk進階輸入輸出 

1.讀取下一個記錄: 下一個記錄完成模式匹配,然後立即執行相應的操作。通常它會用匹配的模式執行操作中的程式碼。 next導致這個記錄的任何額外匹配模式被忽略。 

2.簡單地讀取一條記錄 

awk的 getline語句用於簡單地讀取一條記錄。如果使用者有一個資料記錄類似兩個實體記錄,那麼getline將尤其有用。它完成一般字段的分離(設定字段變數$0 FNR NF NR)。如果成功則回傳1,失敗則回傳0(到達檔案尾)。若需要簡單讀取一個文件,可以寫以下程式碼: 

例:範例getline的使用 

{while(getline==1) 

#process the inputted fields 
} getline保存輸入資料在一個欄位中,而不是透過使用getline variable的形式處理一般欄位。使用這種方式時,NF被置成0,FNR和NR被增值。 

使用者也可以使用getline
另一種使用getline語句的方法是從UNIX指令接受輸入,例如下面的範例: 

例:範例從UNIX指令接受輸入 

{while("who -u"|getline) 
{
{while("who -u"|getline) 

{ each line from the who command 



當然,也可以使用以下形式: 

"command" | getline variable 

3.關閉文件: 
方法是使用awk的close語句。 

close("filename") 

filename可以是getline開啟的檔案(也可以是stdin,包含檔案名稱的變數或是getline使用的確切指令)。或一個輸出檔案(可以是stdout,包含檔案名稱的變數或使用管道的確切命令)。

4.輸出到一個檔案: 

awk中允許用以下方式將結果輸出到一個檔案: 

printf("hello word!")>"datafile" 
或 
printf("hello word!")> >"datafile" 

5.輸出到一個指令 

awk中允許用以下方式將結果輸出到一個指令: 

printf("hello word!")|"sort-t','" 

awk與shell script混合程式 

因為awk可以作為一個shell指令使用,因此awk能與shell批次程式很好的融合在一起,這給實現awk與shell程式的混合程式設計提供了可能。實現混合程式設計的關鍵是awk與shell script之間的對話,換言之,就是awk與shell script之間的資訊交流:awk從shell script中取得所需的資訊(通常是變數的值)、在awk中執行shell命令列、shell script將命令執行的結果送給awk處理以及shell script讀取awk的執行結果等等。 

1.awk讀Shell script程式變數 

在awk中我們可以透過「'$變數名'」的方式讀取sell scrpit程式中的變數。 

例:在下面的範例中,我們將讀取sell scrpit程式中的變數Name,該變數存放的是文字myfile的撰寫者,awk將會印出這個人名。

$cat writename 

# @(#) 




Name="張三" nawk 'BEGIN {name="'Name'Name' ,FILENAME,name");} 
{...}END{...}' myfile 




2.傳送shell指令的執行結果送給方法,我們可以將一條shell指令的結果透過管線(|)傳遞給awk處理: 

例:範例awk處理shell指令的執行結果 

$who -u | awk '{printf("%s正在執行%s",$2,$1)}' 

該指令將列印出註冊終端正在執行的程式名稱。 

3.shell script程式讀awk的執行結果 

為了實現shell script程式讀取awk執行的結果,我們可以採取一些特殊的方法,例如我們可以用變數名稱=`awk語句`的形式將awk執行的結果存放入一個shell script變數。程式處理。終端)發送訊息。 # @(#) wall.shell:發送訊息給每個已註冊終端 

cat >/tmp/$$ 
#使用者輸入訊息文字who -u | awk '{print $2}' | while read tty 
do
cat /tmp/$$>$tty 
done 

在這個程式裡,awk接受who -u命令的執行結果,該命令列印所有已註冊終端的信息,其中第二個字段是已註冊終端的設備名,因此用awk指令析出該設備名,然後用while read tty語句循環讀出這些檔名到變數(shell script變數)tty中,作為訊息傳送的終結位址。命令列----嵌入函數system() 

system()是一個不適合字元或數字類型的嵌入函數,該函數的功能是處理作為參數傳遞給它的字串。 system對這個參數的處理就是將其當作命令處理,也就是說將其當作命令列一樣加以執行。這使得用戶在自己的awk程式需要時可以靈活地執行命令或腳本。 

例:以下的程式將使用system嵌入函數列印使用者編製好的報表文件,而這個檔案則存放在名為myreport.txt的檔案中。為簡約起見,我們只列出了其END部分: 




END {close("myreport.txt");system("lp myreport.txt");} 

在這個範例中,我們先使用close語句關閉了文件myreport.txt文件,然後使用system嵌入函數將myreport.txt送入印表機列印。

寫到這裡,我不得不跟朋友們說再見了,實在地說,這些內容仍然是awk的初步知識,電腦永遠是前進的科學,awk也不例外,本篇所能做的只是在你前行的漫漫長途中鋪平一段小小開端,剩下的路還得靠你自己去走。老實說,如果本文真能為你前進的路上帶來些許的方便,那本人就知足了! 

如對本篇有任何疑問,請E-mail To:Chizlong@yeah.net或到首頁http://chizling.yeah.net留言。


附錄: 

1.awk的常規表達式元字元 

換碼序列 
^ 在字串的開頭開始匹配 
$ ] 與[]內的任一字符匹配 
[A-Ca-c] 與A-C及a-c範圍內的字符匹配(按字母表順序) 
[^ABC] 與[]內的所有字符以外的任一字符匹配 
Desk|Chair 與Desk和Chair中的任一個符合 
[ABC][DEF] 關聯。與A、B、C中的任一字元匹配,且其後要跟D、E、F中的任一個字元。 
* 與A、B或C中任一個出現0次或多次的字元相符 
+ 與A、B或C中任何一個出現1次或多次的字元相符 
? 與一個空串或A、B或C在任何一個字元相符 
(Blue|Black)berry 合併常規表達式,與Blueberry或Blackberry相匹配 

2.awk算術運算子 

運算符用途---------------- 
x^y x的y次方 
x**y 同上 
x%y 計算x/y的餘數(求模) 
x+y x加y
x-y x減y 
x*y x乘y 
x/y x除y 
-y 負y(y的開關符號);也稱一目減 
++y y加1後使用y(前加) y值後加1(字尾加) 
--y y減1後使用y(前置減) 
y-- 使用後y減1(後綴減) 
x=y 將y的值賦給x 
x+= y 將x+y的值賦給x 
x-=y 將x-y的值賦給x 
x*=y 將x*y的值賦給x 
x/=y 將x/y的值賦給x x %=y 將x%y的值賦給x 
x^=y 將x^y的值賦給x 
x**=y 將x**y的值賦給x 

3.awk允許的測試: 

運算子意義 

x==y x等於y 
x!=y x不等於y 
x>y x大於y 
x>=y x大於或等於y 
xx~re x符合正規表示式re? 
x!~re x不符正規表示式re? 

4.awk的運算子(依優先順序升序排列) 

= 、+=、 - =、 *= 、/= 、 %= 
|| 
&& 
> >= xy (字串連結,'x'y'變成"xy") 
+ -
* / % 
++ -- 

5.awk內建變數(預定義變數) 

說明:表中v項表示第一個支援變數的工具(下同):A=awk,N=nawk, P=POSIX awk,G=gawk 

V 變數意義缺省值 
--------------------------------- ----------------------- 
N ARGC 命令列參數個數 
G ARGIND 目前被處理檔案的ARGV標誌符 
N ARGV 命令列參數陣列 
G CONVFMT 數位轉換格式%.6g 
P ENVIRON UNIX環境變數 
N ERRNO UNIX系統錯誤訊息 
G FIELDWIDTHS 輸入欄位寬度的空白分隔字串 
A FILENAME欄位分隔符號空格 
G IGNORECASE 控制大小寫敏感0(大小寫敏感) 
A NF 目前記錄中的字段數 
A NR 已經讀出的記錄數 
A OFMT 數字的輸出格式%.6g 
A OFS 輸出欄位分隔符號空格 
A ORS 輸出的記錄分隔符號新行 
A RS 輸入的記錄他隔符新行 
N RSTART 被匹配函數匹配的字串首 
N RLENGTH 被匹配函數匹配的長度 
N SUBSEP 下標符"34" 

6.awk的內建函數 

V 函數用途或回傳值 
------------------------------ ------------------ 
N gsub(reg,string,target) 每次常規表達式reg匹配時替換target中的string 
N index(search,string) 返回string中search字串的位置 
A length(string) 求字串string中的字元個數 
N match(string,reg) 傳回常規表達式reg相符的string中的位置 
N printf(format,variable) 格式化輸出,按format提供的格式輸出變數variable。
N split(string,store,delim) 根據分界符delim,分解string為store的陣列元素 
N sprintf(format,variable) 傳回一個包含基於format的格式化數據,variables是要放到字串中的資料 
G strftime(format,timestamp) 傳回一個基於format的日期或時間串,timestmp是systime()函數傳回的時間 
N sub(reg,string,target) 第一次當常規表達式reg匹配,取代target串中的字串 
A substr(string,position,len) 傳回一個以position開始len個字元的子字串 
P totower(string) 傳回string中對應的小寫字元 
P toupper(string) 傳回string中對應的大寫字元
A atan(x,y) x的餘切(弧度) 
N cos(x) x的餘弦(弧度) 
A exp(x) e的x冪 
A int(x) x的整數部分 
A log冪 
A int(x) x的整數部分 
A log (x) x的自然對數值 
N rand() 0-1之間的隨機數 
N sin(x) x的正弦(弧度) 
A sqrt(x) x的平方根 
A srand(x) 初始化隨機數發生器。如果忽略x,則使用system() 
G system() 返回自1970年1月1日以來經過的時間(按秒計算) 


更多AWK指令詳解相關文章請追蹤PHP中文網!


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板