📄 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 + -