青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

AWK高級編程

Posted on 2010-08-26 10:26 Prayer 閱讀(4957) 評論(0)  編輯 收藏 引用 所屬分類: Shell

1. 程序元素

一個(gè)awk 程序是一對以模式(pattern) 與大括號框起來的操作(action) 組合而成的,或許,還會(huì)加上實(shí)現(xiàn)操作細(xì)節(jié)的函數(shù)(function ) 。針對每個(gè)匹配于輸人數(shù)據(jù)的模式,操作會(huì)被執(zhí)行,且所有模式都會(huì)針對每條輸人記錄而檢查。模式或操作可省略其中一個(gè)。如果模式省略,則操作將被應(yīng)用到每條輸人記錄; 如果操作省略,則默認(rèn)操作為打印匹配之記錄在標(biāo)準(zhǔn)輸出上。以下是傳統(tǒng)awk 程序的配置:

pattern  {action} 如模式匹配,則執(zhí)行操作

pattern  {action} 如模式匹配,則打印記錄

雖然,模式多半是數(shù)字或字符串表達(dá)式,不過awk 以保留字BEGIN 與END 提供兩種特殊模式。

與BEG 工N 關(guān)聯(lián)的操作只會(huì)執(zhí)行一次,在任何命令行文件或一般命令行賦值被處理之前,但是在任何開頭的一V 選項(xiàng)指定已經(jīng)完成之后。

END 操作也是只執(zhí)行一次,用于所有輸入數(shù)據(jù)已被處理完之后。它多半用于產(chǎn)生摘要報(bào)告,或是執(zhí)行清除操作。

BEGIN 與END 模式可以是任意順序,可以存在于awk 程序內(nèi)的任何位置。不過,為了方便,我們通常將BEGIN 模式放在程序的第一個(gè)位置,而將END 模式放在最后。

2. 注釋與空白

awk 里的注釋是從# 開始到該行結(jié)束,就像在Shell 里那樣。空行等同于空的注釋。

3. 字符串與字符串表達(dá)式

awk 字符串包含零至多個(gè)字符,且在字符串的長度上沒有限制,視可用內(nèi)存而定。

字符串的比較,用的是傳統(tǒng)的關(guān)系運(yùn)算符:==( 相等) 、!=( 不等) 、<( 小于) 、<=( 小于等于) 、>( 大于) ,以及>=( 大于等于》。比較后返回l 為真,0 為假。比較不同長度的字符串,且其中一個(gè)字符串為另一個(gè)的初始子字符串時(shí),較短的會(huì)定義為小于較長的那個(gè),因此,“A ”< “AA ”的值為真。

awk 并無特殊的字符串接續(xù)運(yùn)算符。也就是說,兩個(gè)連續(xù)字符串,會(huì)自動(dòng)地連接在一起。以下每一組賦值設(shè)置標(biāo)量變量。為相同的具有四個(gè)字符的字符串:

s = “ABCD ”

s = “AB ”“CD ”

s = “A ”“B ”“CD ”

s = “A ”“B ”“C ”“D ”

字符串不需要是常數(shù),如果我們繼續(xù)上述的賦值:

t= s s s

則t 的值為“ABCDABCDABCD “。.

 

將數(shù)字轉(zhuǎn)換為字符串,通過數(shù)字連接空字符串即可

n =123 ,

接著是:

s = ““ n ,把值“123 ”賦給s 。

 

awk 功能強(qiáng)大的地方大多來自于它對正則表達(dá)式的支持。有兩個(gè)運(yùn)算符:~( 匹配) 與!~( 不匹配) 讓awk 更容易使用正則表達(dá)式:”ABC ”~ ”^[A-Z]+$ “,結(jié)果為真。

4. 數(shù)值與數(shù)值表達(dá)式

所有awk 里的數(shù)字,都以雙精確度的浮點(diǎn)值表示。浮點(diǎn)數(shù)可以包含一個(gè)末端以字母e( 或E) 所表示的10 次方指數(shù)以及可選地帶正負(fù)號的一個(gè)整數(shù)。舉例來說:0.03125, 3.125e-2, 3125e-5 與0.003125E1 ,同樣都是表示1/32 。因?yàn)閍wk 里所有算術(shù)都是浮點(diǎn)算術(shù)。

awk 并沒有提供字符串轉(zhuǎn)數(shù)字的函數(shù),不過awk 的做法很簡單:只要加個(gè)零到字符串里,例如:s="123" ,接著是n=0+s ,便將數(shù)字123 賦值給n 了。

5. awk 的數(shù)值運(yùn)算符

表9 一:awk 的數(shù)值運(yùn)算符( 優(yōu)先級由大到小排列)

運(yùn)算符                   說明

  ++ --                    增加與減少( 前置或后置)

  ^ **                     指數(shù)( 右結(jié)合性)

  ! + -                     非、一元(unary) 加號、一元減號

  * / %                    乘、除、余數(shù)

  + -                      加、減

< <= == != > >=           比較

&&                         邏輯AND( 簡寫)

||                        邏輯OR( 簡寫)

?:                        三元條件式

= += -= *= /= %= ^= **=      賦值( 右結(jié)合性)

6. 標(biāo)量變量

保存單一值的變量叫做標(biāo)量變量。

a wk 的變量名稱必須以ACSII 字母或下劃線開始,然后選擇性地接上字母、下劃線及字。因此,變量名稱要匹配正則表達(dá)式[A-Za-z-][A-Za-z_0-9]* 。變量名稱在實(shí)際上并沒有長度的限制。awk 的變量名稱是與大小寫有關(guān)的:foo, Fo 。與FOO 是完全不同的三個(gè)名稱。一般使用上以及建議用法是: 養(yǎng)成習(xí)慣,將局部變量全設(shè)為小寫、全局變量第一個(gè)字母為大寫,而內(nèi)建變量則全是大寫。

7. 數(shù)組變量

awk 允許在數(shù)組名稱之后,以方括號將任意數(shù)字或字符串表達(dá)式 括起來作為索引。例如:

telephone["Alice"]= “555-0134"

telephone["Bob"]= “555-0135"

telephone["Carol”]= “555-0136"

telephone["Don"]= “555-0141"

以任意值為索引的數(shù)組,稱之為關(guān)聯(lián)數(shù)組,因?yàn)樗鼈兊拿Q與值是相關(guān)聯(lián)的。重要的是,awk 將其應(yīng)用于數(shù)組中,允許查找( find ) 、插入(insert ) 以及刪除( remove) 等操作,在一定的時(shí)間內(nèi)完成,與存儲(chǔ)多少項(xiàng)目無關(guān)。

一個(gè)變量不能同時(shí)用作標(biāo)量變量和數(shù)組變量。當(dāng)你應(yīng)用delet 。語句刪除數(shù)組的元素

(element] 的時(shí)候,不會(huì)刪除它的名稱。因此。像這樣的代碼:

x[1]=3

delete x

x=789

會(huì)引發(fā)awk 發(fā)出提示,告訴你不可以給數(shù)組名稱賦值.

8. 命令行參數(shù)

awk 通過內(nèi)建變量ARGC( 參數(shù)計(jì)數(shù)) 與ARGV( 參數(shù)向量,或參數(shù)值) ,讓命令行參數(shù)

可用。下面簡短的程序說明其用法;

[root@local~]#cat showargs.awk

BEGIN{

      print ”ARGC= ”,ARGC

      for (k=0;k<ARGC; k++)

          print "ARGV[”k”]=[”ARGV[k] “

}

再來看看將它用在一般awk 命令行上,會(huì)產(chǎn)生什么樣的結(jié)果:

[root@local~]# awk -v One=1 -v Two=2 -f showargs.awk Three=3 file1 Four=4 filet2 file3

ARGC=6

ARGV[0]=[awk]

ARGV[1]=[Three=3]

ARGV[2]=[file1]

ARGV[3]=[Four=4]

ARGV[4]=[file2]

ARGV[5]=[file3]

9. 環(huán)境變量

awk 提供訪問內(nèi)建數(shù)組ENV 工RON 中所有的環(huán)境變量:

[root@local~]#awk 'BEGIN {print ENVIRON["HOME"];print ENVIRON["USER]} ‘

/home/Jones

hones

通常你應(yīng)將ENVIRON 看成是一個(gè)只讀數(shù)組。

10. 模式

模式由字符串與 / 或數(shù)值表達(dá)式構(gòu)建而成。常用的模式如下:

NF==0    選定空記錄

NF>3     選定擁有三個(gè)字段以上的記錄

NR<5    選定第 1 到第 4 條記錄

(FNR==3)&&(FILENAME~/[.] [ch]$/) 來源于 C 源文件中選定記錄 3

$1~/Jones/   選定字段 1 里有 . ” jones “的記錄

/[Xx][Mm][Ll]/ 選定含有‘ 'XML' 。的記錄,并忽略大小寫差異

$0~/[Xx][Mm][Ll]/ 同上

11. 操作

以最簡單的形式來說,純print 意指在標(biāo)準(zhǔn)輸出上,打印當(dāng)前的輸入記錄($0) ,接著是輸出記錄分隔字符)ORS 的值,默認(rèn)為單一換行字符。因此,下面這些程序所做的全是相同的操作:

1    模式為真,默認(rèn)操作為打印

NR>0 {print} 有記錄時(shí)打印( 恒為真)

1    {print}  模式為真。則打印,這是默認(rèn)值

{print}  無模式則視為真,明確的打印,這是默認(rèn)值

{print $0}  相同,但打印明確的值

下面的例子已經(jīng)是完整的awk 程序。在每一個(gè)中,我們都只顯示前三個(gè)輸入字段,并通過省略選定模式,選定所有的記錄。awk 程序語句以分號分隔,而且我們會(huì)使用些略微不同的操作代碼,以修改輸出字段分隔字符:

[root@local~]#echo ‘one two three four'| awk ‘{print $1,$2,$3}’

one two three

[root@local~]#echo ‘one two three four'| awk ‘{OFS=”…”;print $1,$2,$3}’

one…two…three

[root@local~]#echo ‘one two three four'| awk ‘{OFS=”\n”;print $1,$2,$3}’

one

two

three

 

改變輸出字段分隔字符而沒有指定任何字段,不會(huì)改變$0:

[root@local~]#echo ‘one two three four'| awk ‘{OFS=”\n”;print $0}’

one two three four

不過,如果我們更改輸出字段分隔字符,并指定至少一個(gè)字段( 即使我們未變更其值) ,

強(qiáng)制以新的字段分隔字符重新組合記錄,則結(jié)果為:

[root@local~]#echo ‘one two three four'| awk ‘{OFS=”\n”;$1=$1;print $0}’

one

two

three

four

 

12. 在awk 中的單行程序

1.UNIX 單詞計(jì)數(shù)程序wc;

[root@local~]#awk ‘{C+=length($0)+1;w+=NF} END {print NR, W, C}’

 

2. 撇開NUL 字符問題,awk 其實(shí)可以輕松取代cat ,下面這兩個(gè)例子會(huì)產(chǎn)生相同輸出:

[root@local~]# cat*.xml

[root@local~]# awk 1*.xml

 

3. 要將原始數(shù)據(jù)值及它們的對數(shù)打印為單欄的數(shù)據(jù)文件,可使用:

[root@local~]# awk ‘{print $1, log($1)}’file(s)

 

4. 在以空白分隔字段的表格中,報(bào)告第n 欄的和:

[root@local~]# awk -v COLUMN=n ‘{sum+=$COLUMN} END {print sum} ’file (s)

 

5. 微調(diào)上述報(bào)告,產(chǎn)生字段n 的平均值:

[root@local~]# awk -v COLUMN=n ‘{sum+=$COLUMN} END {print sum/NR } ’file (s)

6. 針對花費(fèi)文件( 其記錄包含描述與金額于最后一個(gè)字段) ,打印花費(fèi)總數(shù)。可使用內(nèi)建變量NF 計(jì)算總值:

[root@local~]# awk’{sum+=$NF; print $0, sum}’files)

 

7. 這里是三種查找文件內(nèi)文本的方式:

[root@local~]#egrep ‘pattern|pattern’ file (s)

[root@local~]#awk ‘/pattern|pattern/’file (s)

[root@local~]#awk ‘/pattern}pattern/ {print FILENAME ”: ”FNR ”: ”$0} ’file(s)

 


8. 如果你要限制僅查找100 一150 行,可以通過兩個(gè)工具程序,再搭配管道,不過這么做會(huì)漏掉位置信息:

[root@local~]#sed -n -e 100,150p -s file(s) | egrep 'pattern'

使用GNU sed 要搭配-s 選項(xiàng),才能為每個(gè)文件重新開始行編號。另外,你也可以通過awk ,使用比較花哨的模式來做:

[root@local~]#awk ‘(100<=FNR) && (FNR <= 150) && /pattern/\

          {print FILENAME ”:” FNR ”:”$0}’file(s)

9. 要在一個(gè)四欄表格里,調(diào)換第二與第三欄,假設(shè)它們是以制表字符分隔,那么可以

使用下面三種方式的其中一種:

[root@local~]#awk -F'\t’-v OFS='\t’{print $1, $3, $2, $4}’old > new

[root@local~]#awk ‘BEGIN{FS=OFS="\t"}{print $1, $3 ,$2 ,$4} ’old>new

[root@local~]#awk –F ‘\t’{print $1"\t" $3"\t" $2"\t" $4}’old>new

 

10. 要將各欄分隔字符由制表字符( 在此以·顯示) 轉(zhuǎn)換成& ,可在以下兩種方式擇一:

[root@local~]#sed -e 's/ ·/&/g' file(s)

[root@local~]#awk ‘{BEGIN{FS="\t";OFS= “& ”}{$1=$1; print} ’file(s)

 

11. 下面這兩個(gè)管道,都為刪除已排序流里的重復(fù)行

[root@local~]#sort file(s)|uniq

[root@local~]# sort file(s)|awk ‘Last!=$0 { print }{Last=$0}’

 

12. 將回車字符/ 換行字符的行終結(jié),一致轉(zhuǎn)換為以換行字符作為行終結(jié),可在下列方

式中選擇一種:

[root@local~]#sed –e ‘s/\r$//’ file(s)

[root@local~]#sed –e ‘s/^M$//’ file(s)

[root@local~]# mawk ‘BEGIN {RS=“\r\n"} {print}’file(s)

 

13. 要將單空格的文本行,轉(zhuǎn)換為雙空格的行,可在下列方式選擇一種

[root@local~]#sed –e ‘/s/$/\n/ ’file(s)

[root@local~]#awk ‘BEGTN{ ORS = "\n\n"){print}’file(s)

[root@local~]#awk ‘BEGIN{ ORS="\n\n" }1 ’ file(s)

[root@local~]#awk {print $0 “\n”} ’ file(s)

[root@local~]#awk ‘{print;print ” ”} ’ file(s)

13. 語句

13.1. 條件語句

if(expressionl)

      stateme 刀t1

else if(expression2)

      statement2

else if(expression3)

      statement3

else if(expressionk)

      statementk

else

        statementk+l

13.2. 重復(fù)執(zhí)行

awk 提供了 4 種重復(fù)執(zhí)行語句 ( 循環(huán) ):

1. 循環(huán)在起始處使用結(jié)束測試 :

while(expression)

statement

2. 循環(huán)在結(jié)尾處使用結(jié)束測試 :

do

        statement

while (expression)

3. 循環(huán)執(zhí)行可計(jì)數(shù)的次數(shù) :

for(expr1;expr2; expr3)

statement

4. 循環(huán)處理關(guān)聯(lián)數(shù)組里的元素 :

for(key in array)

statement

例如:

for (name in telephone)

print name“\t" telephone[name]

13.3 數(shù)組成員測試

成員測試key in array 是一個(gè)表達(dá)式: 如果key 為array 的一個(gè)索引元素,則計(jì)算為1( 真) 。如果key 不是array 的一個(gè)索引元素,則!(key in array) 為1 。

對于具有多下標(biāo)(subscript) 的數(shù)組,在測試時(shí),請使用圓括號,并以逗點(diǎn)分隔下標(biāo)列表:(i ,j ,…,n)in array

成員測試不可能建立數(shù)組元素,然而引用元素時(shí),如果元素不存在,便會(huì)建立它。因此你應(yīng)該這么寫:

if("Sally" in telephone)

print "Sally is in the directory"

而非:

if (telephone["Sally"]!= ””)

    print "Sally is in the directory"

因?yàn)榈诙N形式會(huì)在她(Sally) 不存在時(shí),將其加入到目錄里,并擁有一個(gè)空電話號碼。

重點(diǎn)是: 你必須能夠區(qū)分尋找索引(index) 與尋找特定值(value) 的差異。索引成員測試需要固定的時(shí)間,而值的查找時(shí)間是與數(shù)組里元素的個(gè)數(shù)成正比,這點(diǎn)我們在先前已通過break 語句內(nèi)的for 循環(huán)解釋過了。如果你需要時(shí)常用到這兩種運(yùn)算,那么構(gòu)建反索引數(shù)組會(huì)比較實(shí)用:

for (name in telephone)

name_by_telephone[telephone[name]]=name

接下來,你就可以使用name_by_telephone ["555-0136"] 在一定時(shí)間內(nèi)找到”Carol" 。當(dāng)然,這里假定所有的值是唯一的: 如果這兩人共享同一個(gè)電話,則name_by_telephone 數(shù)組只會(huì)記錄最后一個(gè)名稱。只要稍做修改就能解決這個(gè)問題:

for (name in telephone)

{

      if (telephone[name] in name_by_telephone)

        name_by_telephone[telephone[name]]=\

              name_by_telephone [telephone[name]) “\t”name

e1se

name_by_telephone[telephone[name]]=name

現(xiàn)在,name_by_telephone 即包含了以制表字符分隔的具有相同電話號碼的人名列表。

14. 用戶控制輸入

awk 也可以通過的getline 語句做這件事。getline 會(huì)返回一個(gè)值,當(dāng)輸入被成功讀取時(shí),它的返回值為++I ,而返回值為0 時(shí),則表示在文件結(jié)尾,而-1 則表示錯(cuò)誤。它的用法很多,見表。

語法             說明

getline       從當(dāng)前輸入文件中,讀取下一條記錄,存入$0 ,并更新NF, NR 與FNR

getline var   從當(dāng)前輸入文件中,讀取下一條記錄,存入var ,并更新NR 與FNR

getline<file   從file 文件中,讀取下一條記錄,存入$0 ,并更新NF, NR 與FNR

getline var<file 從file 文件中,讀取下一條記錄,存入var ,并更新NF, NR 與FNR

cmd|getline    從外部命令cmd 讀取下一條記錄,存入$0 ,并更新NF

cmd|getline var 從外部命令cmd 讀取下一條記錄,存入var

 


命令管道在awk 里可以發(fā)揮強(qiáng)大的功能。管道可以在字符字符串中標(biāo)明,也可以包含任

意的Shell 命令。這里是與getline 搭配使用,如下:

"date" I getline now

close("date")

print "The current time is".now

 

接下來說明的是: 如何在循環(huán)里使用命令管道:

command="head -n 15 /etc/hosts"

while((command I getline s)>0)

      print s

close(command)

 

15. 執(zhí)行外部程序

這里是解決電話名錄排序問題較短的程序方案,使用臨時(shí)性文件與systemty ,而非awk 管道:

tmpfile= “/tmp/telephone.tmp^

for (name in telephone>

print name "\t" telephone[name]>tmpfile

close(tmpfilej

system("sort < tmpfile “)

臨時(shí)性文件必須在調(diào)用system() 之前關(guān)閉,以確保任何緩沖區(qū)輸出都正確地記錄在文件內(nèi)。

對于被system() 執(zhí)行的命令并不需要調(diào)用close() ,因?yàn)閏lose() 僅針對以I/O 重定向運(yùn)算符所打開的文件或管道,還有g(shù)etline, print 或printf 。

傳遞給system[f 的命令可包含數(shù)行

system("cat <<EOFILE\nuno\ndos\ntres\nEOFILE"

它產(chǎn)生的輸出和從嵌入文件復(fù)制到標(biāo)準(zhǔn)輸出一樣

Un0

das

tres

16. 用戶自定義函數(shù)

函數(shù)定義如下:

function name(argl, }rg2, …,argn

{

statements

}

指定的參數(shù)在函數(shù)體中用來當(dāng)作局部變量,它們會(huì)隱藏任何相同名稱的全局性變量。函數(shù)也可用于程序它處,調(diào)用的形式為:

name(exprl, expr2, …,expn)  忽略任何的返回值

result=name(exprl, expr2, …,exprn) 將返回值存儲(chǔ)到result 中

 

在每個(gè)調(diào)用點(diǎn)上的表達(dá)式,都提供初始值給函數(shù)參數(shù)型變量。以圓括號框起來的參數(shù),必須緊接于函數(shù)名稱之后,中間沒有任何空白。

對標(biāo)量參數(shù)所做的變動(dòng),調(diào)用者無從得知,不過對數(shù)組的變動(dòng)就可看見了。換句話說,標(biāo)量為傳值(by vaule ) ,而數(shù)組則為傳引用(by reference): 這對C 語言也是這樣。

函數(shù)體里的return expression 語句會(huì)終止主體的執(zhí)行,并將expression 的值與控制權(quán)傳給調(diào)用點(diǎn)。如果expression 省略,則返回值由實(shí)現(xiàn)期定義。我們測試過的所有系統(tǒng),返回的不是數(shù)字零就是空字符串。

17. 字符串函數(shù)

17.1. 子字符串提取

提取子字符串的函數(shù):substr(string, start, 1en) ,會(huì)返回一份由string 的start 字符開始,共len 個(gè)字符長度的子字符串副本。字符的位置,從1 開始編號:substr("abcde", 2, 3) 將返回。bcd" 。 len 參數(shù)可省略,省略時(shí),則默認(rèn)為length(string)-start+1 ,選出字符串的剩余部分。

17.2. 字符串大小寫轉(zhuǎn)換

tolower(string) 會(huì)返回將所有字母改為同義的小寫的string 副本,而toupper(string) 則返回被改為大寫字母的string 副本。所以tolower("aBcDeF123") 返回”abcdef123",toupper("aBcDeF123") 返回"ABCDEF123" 。

17.3. 字符串大小寫轉(zhuǎn)換

index(string,  find) 查找string 里是否有字符串find ,然后返回string 里find 字符串的起始位置,如果在string 里找不到find ,則返回0 。例如index("abcdef","de") 會(huì)返回4 。

17.4. 字符串匹配

match (string, regexp) 將string 與正則表達(dá)式regexp 匹配,如果匹配,則返回

匹配string 的索引,不匹配,則返回0 。這種方式提供了比表達(dá)式(string~regexp) 還多的信息,后者只能得到計(jì)算值1 或0 。另外match ( ) 也具有一個(gè)有用的副作用: 它會(huì)將全局變量RSTART 設(shè)為在string 中要開始匹配的索引值,而將RLENGTH 設(shè)為要匹配的長度。而匹配子字符串則以substr(string, RSTART, RLENGTH) 表示。

17.5. 字符串替換

awk 在字符串替換功能上,提供兩個(gè)函數(shù):sub(regexp, replacement, target) 與gsub(regexp, replacement, target), sub() 將target 與正則表達(dá)式regexp 進(jìn)行匹配,將最左邊最長的匹配部分替換為字符串replacement 。gsub() 的運(yùn)行則有點(diǎn)類似,不過它會(huì)替換所有匹配的字符串( 前置g 表示global 全局之意) 。

17.6. 字符串替換

awk 針對當(dāng)前輸人記錄$0 自動(dòng)提供了方便的分割為字1,  $}, …、$NF ,也可以函數(shù)來做:split(string, array, regexp) 將string 切割為片段,并存儲(chǔ)到array 里的連續(xù)元素。在數(shù)組里,片段放置在匹配正則表達(dá)式regexp 的子字符串之間。如果regexp 省略,則使用內(nèi)建字段分隔字符FS 的當(dāng)前默認(rèn)值。函數(shù)會(huì)返回array 里的元素?cái)?shù)量。

17.7. 字符串重建

join() 可確保參數(shù)數(shù)組不會(huì)被引用到,除非索引是在范圍之內(nèi)。否則,一個(gè)具有數(shù)組長度為0 的調(diào)用可能會(huì)建立arrayfl3 ,而修改了調(diào)用者的數(shù)組。插人的字段分隔字符為普通字符串,而非正則表達(dá)式,所以針對傳遞給split() 的一般正則表達(dá)式,join() 不會(huì)重建精確的原始字符串。

17.8. 字符串格式化

最后一個(gè)與字符串相關(guān)的函數(shù)是在用戶控制下格式化數(shù)字與字符串:sprintf (format,expression1, expression2, …) ,它會(huì)返回已格式化的字符串作為其函數(shù)值。printf() 的運(yùn)行方式也是這樣,只不過它會(huì)在標(biāo)準(zhǔn)輸出或重定向的文件上顯示格式化后的字符串,而不是返回其函數(shù)值。較新的程序語言以更強(qiáng)大的格式化函數(shù)來取代格式控制字符串,但相對而言讓代碼變得很冗長。按照傳統(tǒng)的文本處理應(yīng)用來說,sprintf 與printf

18. 數(shù)值函數(shù)

函數(shù)           說明

atan2(y, x)   y 返回y/x 的反正切,值介于-pai 與+pai 之間。

cos(x)        返回x 的余弦值( 以弧度(radians) 計(jì)算) ,該值介于-1 與+1 之間

exp(x)        返回x 的指數(shù),ex,

int(x)        返回x 的整數(shù)部分,截去前置的0

log(x)        返回x 的自然對數(shù)。

rand()        返回平均分布的虛擬隨機(jī)r,O<=r<l

sin(x)        返回x 的正弦值( 以弧度(radians] 計(jì)算) ,該值介于-1 與+1 之間

sqrt(x)       返回x 的平方

srand(x)      設(shè)置虛擬隨機(jī)產(chǎn)生器的種子為x ,并返回正確的種子。如果省略x ,則使用當(dāng)前時(shí)間( 以秒計(jì)) 。如果。rand ( ) 未被調(diào)用,則awk 在每次執(zhí)行時(shí)會(huì)從相同的默認(rèn)種子開始;mawk 則不會(huì)。


本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/wzhwho/archive/2010/04/21/5513791.aspx

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久性色av| 欧美丰满少妇xxxbbb| 国产乱码精品一区二区三区五月婷| 一区二区高清视频| 亚洲欧美久久| 国产亚洲成精品久久| 久久香蕉国产线看观看网| 亚洲国产精品999| 一本色道久久综合狠狠躁篇的优点 | 久久久久久97三级| 欧美国产综合视频| 一本色道婷婷久久欧美| 国产精品三上| 久久婷婷丁香| 夜夜嗨av色一区二区不卡| 欧美一级专区免费大片| 黄色在线一区| 欧美精品一区二区三区蜜桃 | 久久先锋资源| 亚洲精品综合| 国产欧美精品一区aⅴ影院| 麻豆av一区二区三区久久| 一区二区高清| 欧美xx69| 香蕉乱码成人久久天堂爱免费| 海角社区69精品视频| 欧美激情一区二区三区在线| 亚洲在线一区二区三区| 欧美激情二区三区| 欧美有码在线视频| 亚洲精品国偷自产在线99热| 国产精品裸体一区二区三区| 麻豆精品在线观看| 亚洲一区二区毛片| 91久久嫩草影院一区二区| 久久国产一区| 亚洲一区二区3| 亚洲丰满在线| 国产欧美精品va在线观看| 欧美高清你懂得| 性色av一区二区三区在线观看 | 亚洲免费观看| 激情久久久久久| 国产精品久久| 欧美激情亚洲精品| 久久激情五月丁香伊人| 一本色道久久综合一区 | 亚洲黄网站在线观看| 久久久久久久国产| 亚洲欧美欧美一区二区三区| 亚洲精品一区二区三区在线观看 | 欧美激情bt| 久久久久久穴| 性久久久久久久久| 亚洲视频免费| 日韩一级免费观看| 亚洲日本欧美日韩高观看| 伊人久久亚洲影院| 狠狠狠色丁香婷婷综合激情| 国产精品制服诱惑| 国产精品护士白丝一区av| 欧美精品网站| 欧美sm重口味系列视频在线观看| 久久精品日产第一区二区三区| 亚洲一区精品视频| 亚洲午夜一级| 中文日韩在线| 一区二区三区产品免费精品久久75| 亚洲高清影视| 亚洲第一精品夜夜躁人人爽| 免费91麻豆精品国产自产在线观看| 久久成人人人人精品欧| 性做久久久久久免费观看欧美| 亚洲免费视频观看| 亚洲一区在线观看免费观看电影高清| 99在线观看免费视频精品观看| 亚洲精品你懂的| 亚洲日本欧美天堂| 99re66热这里只有精品3直播 | 牛人盗摄一区二区三区视频| 久久综合中文字幕| 免费一级欧美片在线观看| 久久综合久久久| 美女黄毛**国产精品啪啪| 欧美不卡视频| 欧美黑人一区二区三区| 亚洲国产精品国自产拍av秋霞| 亚洲第一区在线| 亚洲精品一区在线观看香蕉| 日韩系列在线| 亚洲影院色在线观看免费| 欧美一区二区三区免费大片| 久久精品一本| 欧美国产日本| 国产精品黄色在线观看| 国内精品久久久久久久果冻传媒| 一区一区视频| 亚洲精品一二| 小黄鸭精品aⅴ导航网站入口| 久久久999成人| 欧美大片18| 一本一本a久久| 欧美在线看片| 欧美激情视频网站| 国产精品综合| 91久久嫩草影院一区二区| 在线一区亚洲| 久久久伊人欧美| 最新亚洲视频| 午夜精品美女久久久久av福利| 久久久久久久性| 欧美日韩亚洲激情| 国产在线一区二区三区四区| 亚洲久久视频| 久久精品成人一区二区三区蜜臀 | 国产主播精品在线| 亚洲美洲欧洲综合国产一区| 欧美与欧洲交xxxx免费观看| 亚洲国产成人在线| 午夜精品av| 欧美高清视频在线观看| 国产日韩专区| 亚洲作爱视频| 麻豆9191精品国产| 亚洲视频 欧洲视频| 麻豆久久久9性大片| 国产日韩在线一区二区三区| 一区二区三区高清| 免费在线欧美视频| 亚洲欧美www| 欧美视频日韩视频在线观看| 亚洲国产精品成人久久综合一区| 亚洲欧美激情诱惑| 亚洲精品国久久99热| 久久久久久久久久久成人| 国产精品久久久久久超碰| 日韩一级片网址| 欧美成年人视频网站| 欧美亚洲一区二区在线| 国产精品毛片a∨一区二区三区|国| 亚洲电影在线播放| 久久久免费精品| 亚洲一区在线免费观看| 欧美三级在线| 日韩亚洲欧美精品| 亚洲国产成人久久综合| 欧美资源在线| 久久亚洲二区| 久久成年人视频| 亚洲看片一区| 亚洲四色影视在线观看| 欧美午夜一区二区三区免费大片 | 一本久道久久综合中文字幕| 国产精品福利久久久| 性做久久久久久久免费看| 欧美影院精品一区| **网站欧美大片在线观看| 亚洲国产精品久久久久秋霞影院| 欧美精品一区二区三区久久久竹菊| 亚洲天堂成人在线观看| 亚洲综合色激情五月| 亚洲第一级黄色片| 亚洲精品麻豆| 国产欧美日韩激情| 欧美高清影院| 欧美午夜www高清视频| 久久九九免费视频| 欧美国产精品v| 欧美一区二区三区四区高清| 久久久人成影片一区二区三区观看 | 久久精品欧美日韩| 麻豆成人小视频| 亚洲欧美日韩国产成人精品影院| 欧美一区二区在线观看| 亚洲三级影片| 欧美一区日本一区韩国一区| 亚洲激情视频网站| 亚洲一区二区三区四区五区黄| 一区二区视频欧美| 一本久道久久久| 在线播放一区| 亚洲视频免费| 91久久精品日日躁夜夜躁国产| 亚洲天堂av电影| 亚洲国产毛片完整版| 亚洲一区二区三区国产| 最新日韩在线视频| 香蕉久久a毛片| 夜夜夜久久久| 久久性天堂网| 欧美专区在线观看| 欧美日韩亚洲免费| 免费观看国产成人| 国产乱人伦精品一区二区 | 欧美三级免费| 91久久午夜| 亚洲电影免费在线观看| 午夜一区在线| 亚洲欧美欧美一区二区三区| 欧美成人69av|