?? 4.html
字號:
while循環<br>while循環的語法如下:<br>while(expression){<br>commands<br>}<br>例如:<br>#interest calculation computes compound interest<br>#inputs from a file arethea mount,interest_rateandyears<br>{var=1<br>while(var<=$3){<br>printf("%f\n",$1*(1+$2)^var)<br>var++<p>for循環<br>for循環的語法如下:<br>for(initialization;expression;increment){<br>command<br>}<br>例如:<br>#interest calculation computes compound interest<br>#inputs from a fil earethea mount,interest_rateandyears<br>{for(var=1;var<=$3;var++){<br>printf("%f\n",$1*(1+$2)^var)<br>}}<p>next和exit<br>next指令用來告訴gawk處理文件中的下一個記錄,而不管現在正在做什么。語法如下:<br>{command1<br>command2<br>command3<br>next<br>command4<br>}<br>程序只要執行到next指令,就跳到下一個記錄從頭執行命令。因此,本例中,command4指令永遠不會被執行。<br>程序遇到exit指令后,就轉到程序的末尾去執行END,如果有END的話。<p><p><p><center><A HREF="#Content">[目錄]</A></center><hr><br><A NAME="I130" ID="I130"></A><center><b><font size=+2>數組</font></b></center><br> gawk語言支持數組結構。數組不必事先初始化。聲明一個數組的方法如下:<p>arrayname[num]=value<p>請看下面的例子:<p>#reverse lines in a file<br>{line[NR]=$0} #remember each line<br>END{var=NR #output lines in reverse order<br>while(var>0){<br>printline[var]<br>var--<br>}<p> 此段程序讀取一個文件的每一行,并用相反的順序顯示出來。我們使用NR作為數組的下標來存儲文件的每一條記錄,然后在從最后一條記錄開始,將文件逐條地顯示出來。<p><p><p><center><A HREF="#Content">[目錄]</A></center><hr><br><A NAME="I131" ID="I131"></A><center><b><font size=+2>自定義函數</font></b></center><br>用戶自定義函數<p> 復雜的gawk程序常常可以使用自己定義的函數來簡化。調用用戶自定義函數與調用內部函數的方法一樣。函數的定義可以放在gawk程序的任何地方。<br>用戶自定義函數的格式如下:<br>functionname(parameter-list){<br>body-of-function<br>}<br> name是所定義的函數的名稱。一個正確的函數名稱可包括一序列的字母、數字、下標線(underscores),但是不可用數字做開頭。parameter-list是函數的全部參數的列表,各個參數之間以逗點隔開。body-of-function包含gawk的表達式,它是函數定義里最重要的部分,它決定函數實際要做的事情。<p> 下面這個例子,會將每個記錄的第一個字段的值的平方與第二個字段的值的平方加起來。<p>{print"sum=",SquareSum($1,$2)}<br>function SquareSum(x,y){<br>sum=x*x+y*y<br>returnsum<br>}<p><p><br><center><A HREF="#Content">[目錄]</A></center><hr><br><A NAME="I132" ID="I132"></A><center><b><font size=+2>幾個實例</font></b></center><br>最后,再舉幾個gawk的例子:<p>gawk'{if(NF>max)max=NF}<br>END{printmax}'<br>此程序會顯示所有輸入行之中字段的最大個數。<p>gawk'length($0)>80'<br>此程序會顯示出超過80個字符的每一行。此處只有模式被列出,動作是采用缺省值顯示整個記錄。<p>gawk'NF>0'<br>顯示擁有至少一個字段的所有行。這是一個簡單的方法,將一個文件里的所有空白行刪除。<p>gawk'BEGIN{for(i=1;i<=7;i++)<br>printint(101*rand())}'<br>此程序會顯示出范圍是0到100之間的7個隨機數。<p>ls-lfiles|gawk'{x+=$4};END{print"totalbytes:"x}'<br>此程序會顯示出所有指定的文件的總字節數。<p>expandfile|gawk'{if(x<length())x=length()}<br>END{print"maximumlinelengthis"x}'<br>此程序會將指定文件里最長一行的長度顯示出來。expand會將tab改成space,所以是用實際的右邊界來做長度的比較。<p>gawk'BEGIN{FS=":"}<br>{print$1|"sort"}'/etc/passwd<br>此程序會將所有用戶的登錄名稱,依照字母的順序顯示出來。<p>gawk'{nlines++}<br>END{printnlines}'<br>此程序會將一個文件的總行數顯示出來。<p>gawk'END{printNR}'<br>此程序也會將一個文件的總行數顯示出來,但是計算行數的工作由gawk來做。<p>gawk'{printNR,$0}'<br>此程序顯示出文件的內容時,會在每行的最前面顯示出行號,它的函數與‘cat-n’類似。<p><p><p><center><A HREF="#Content">[目錄]</A></center><hr><br><A NAME="I133" ID="I133"></A><center><b><font size=+2>Perl</font></b></center><br>Perl的基本特點<p> “別期望在一刻鐘內就能領略Perl的所有神奇之處,這種情況很像吃香蕉,用不著吃完整只香蕉后才知其味,每咬一口都是享受,并促使你再咬下一口,再下一口。”上面這段話是Perl項目發起人勞利·華爾(LarryWall)對學習Perl語言的一段經典評論,希望大家都能找到這種感覺。<br> Perl的設計目標是幫助UNIX用戶完成一些常見的任務,這些任務對于Shell來說過于沉重或對移植性要求過于嚴格。Perl語言中包含了C、C++、shell,script、sed、awk這幾個語言的語法,它最初的目的就是用來取代UNIX中sed/awk與腳本語言的組合,用來匯整信息,產生報表。因此Perl語言要遠遠比前面講的BASH復雜和功能強大。Perl的設計原則或者說Perl的設計哲學是以實用為第一優先,也就是力圖使Perl語言容易使用、有效率、而且完整。<br> Perl是按GNUPublicLicense和ArticticLicense兩種許可證形式分發的,其實質是開源軟件、自由軟件的,原先運行于UNIX和類UNIX系統,現在已可以方便地在OS/2,Windows9x,Windows/NT等系統下運行。Perl是一種解釋運行的語言,和BASH程序一樣,一般Perl程序的第一行需注明自己是一個Perl程序而不是Shell程序,所以一般將下面一行語句:<br> #!/usr/bin/perl 作為文件的第一行。<br> Perl由于引入了模塊的設計思想,隨著版本的改進,功能越來越強。現在Perl的功能已經超乎原先設計時的想象,幾乎任何事都可以做到,也變成每一部工作站必備的標準工具了。Perl最為著名的一點就是他對字符串的處理,由于Internet對文字信息處理的巨大需求,使得Perl的應用如日中天,而且Perl語言也的確是一個非常優秀的文字信息處理語言。<br> 一個有用的Perl程序可以很短。例如希望更換大量文件中的一些相同內容,可以使用下面的一條命令:<br> perl-e's/gopher/WorldWideWeb/gi'-p-i.bak*.html<p>下面是一個基本的perl程序:<br>#!/usr/local/bin/perl<br>#<br>#Programtodotheobvious<br>print'Helloworld.';#只是簡單地顯示出Helloworld.字符串。<br><center><A HREF="#Content">[目錄]</A></center><hr><br><A NAME="I134" ID="I134"></A><center><b><font size=+2>變量</font></b></center><br>Perl中有三種變量:標量,數組(列表)和相關數組。<p> Perl中最基本的變量類型是標量。標量既可以是數字,也可以是字符串,而且兩者是可以互換的。具體是數字還是字符串,可以有上下文決定。標量變量的語法為$variable_name。例如:<br>$priority=9;<br>把9賦予標量變量$priority,你也可以將字符串賦予該變量:<br>$priority='high';<p> 注意在Perl中,變量名的大小寫是敏感的,所以$a和$A是不同的變量。<br> 以下的數值或字符串都可以賦給標量:<br>12312.45E-100xff(hex)0377(octal)<br>'Whatyou$seeis(almost)what\nyouget''Don\'tWalk'<br>"Howareyou?""Substitutevaluesof$xand\nin\"quotes."<br>`date``uptime-u``du-sk$filespec|sort-n`<br>$x$list_of_things[5]$lookup{'key'}<br> 從上面可以看出,Perl中有三種類型的引用。雙引號("")括起來的字符串中的任何標量和特殊意義的字符都將被Perl解釋。如果不想讓Perl解釋字符串中的任何標量和特殊意義的字符,應該將字符串用單括號括起來。這時,Perl不解釋其中的任何字符,除了\\和\'。最后,可以用(`)將命令括起來,這樣,其中的命令可以正常運行,并能得到命令的返回值。請看下面的例子:<p>1#!/usr/bin/perl<br>2$folks="100";<br>3print"\$folks=$folks\n";<br>4print'\$folks=$folks\n';<br>5print"\n\nBEEP!\a\LSOMEBLANK\ELINESHERE\n\n";<br>6$date=`date+%D`;<br>7print"Todayis[$date]\n";<br>8chop$date;<br>9print"Dateafterchoppingoffcarriagereturn:[".$date."]\n";<p> 注意實際程序中不應該包括行號。其輸出結果如下:<p>$folks=100<br>$folks=$folks\n<br>BEEP!someblankLINESHERE<br>Todayis[03/29/96]<br>Dateafterchoppingoffcarriagereturn:[03/29/96]<p>第3行顯示$folks的值。$之前必須使用換碼符\,以便Perl顯示字符串$folks而不是$folks的值100。<br>第4行使用的是單引號,結果Perl不解釋其中的任何內容,只是原封不動地將字符串顯示出來。<br>第6行使用的是(`),則date+%D命令的執行結果存儲在標量$date中。<p>上例中使用了一些有特殊意義的字符,下面列出這些字符的含義:<br>\n換行。<br>\r回車。<br>\t制表符。<br>\a蜂鳴聲。<br>\bBackspace。<br>\L\E將\L和\E之間的字符轉換成小寫。<br>\l將其后的字符轉換成小寫。<br>\U\E將\U和\E之間的字符轉換成大寫。<br>\u將其后的字符轉換成大寫。<br>\cC插入控制字符C。<br>\x##十六進制數##。<br>\0ooo八進制數ooo。<br>\\反斜杠。<br>\按原樣輸出下一個字符,例如:\$輸出$。<br>Perl中的數字是以浮點形式存儲的。下面列出有關的數字運算符:<br>$a=1+2;#1加2,結果存儲在$a中。<br>$a=3-4;#3減4,結果存儲在$a中。<br>$a=5*6;#5乘6,結果存儲在$a中。<br>$a=7/8;#7除以8,結果存儲在$a中。<br>$a=9**10;#9的10次方,結果存儲在$a中。<br>$a=5%2;#取5除2的余數,結果存儲在$a中。<br>++$a;#$a加1,然后賦予$a。<br>$a++;#先將$a返回,然后$a加1。<br>--$a;#$a減1,然后賦予$a。<br>$a--;#先將$a返回,然后$a減1。<br>Perl支持的邏輯運算符:<br>$r=$x||$y$r=$x或$y。<br>$r=$x&&$y$r=$x與$y。<br>$r=!$x$r=非$x。<br>對于字符標量,Perl支持下面的運算符:<br>$a=$b.$c;#將$b和$c連接,然后賦予$a。<br>$a=$bx$c;#$b重復$c次,然后賦予$a。<br>下面是Perl中的賦值方法:<br>$a=$b;#將$b賦予$a。<br>$a+=$b;#$b加$a,然后賦予$a。<br>$$a-=$b;#$a減$b,然后賦予$a。<br>$a.=$b;#把$b連接到$a的后面,然后賦予$a。<br>你也可以使用下面的比較運算符:<br>$x==$y如果$x和$y相等,則返回真。<br>$x!=$y如果$x和$y不相等,則返回真。<br>$x<$y如果$x比$y小,則返回真。<br>$x<=$y如果$x小于等于$y,則返回真。<br>$x>$y如果$x比$y大,則返回真。<br>$x>=$y如果$x大于等于$y,則返回真。<br>$xeq$y如果字符串$x和字符串$y相同,則返回真。<p>數組<br> 數組也叫做列表,是由一系列的標量組成的。數組變量以@開頭。請看以下的賦值語句:<br>@food=("apples","pears","eels");<br>@music=("whistle","flute");<p> 數組的下標從0開始,你可以使用方括號引用數組的下標:<br>$food[2]<br>返回eels。注意@已經變成了$,因為eels是一個標量。<p> 在Perl中,數組有多種賦值方法,例如:<br>@moremusic=("organ",@music,"harp");<br>@moremusic=("organ","whistle","flute","harp");<p> 還有一種方法可以將新的元素增加到數組中:<br>push(@food,"eggs");<p> 把eggs增加到數組@food的末端。要往數組中增加多個元素,可以使用下面的語句:<br>push(@food,"eggs","lard");<br>push(@food,("eggs","lard"));<br>push(@food,@morefood);<br>push返回數組的新長度。<p> pop用來將數組的最后一個元素刪除,并返回該元素。例如:<br>@food=("apples","pears","eels");<br>$grub=pop(@food);#此時$grub="eels"<br>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -