📄 4.html
字号:
gawk中有各种的内部函数,现在介绍如下:<p>sqrt(x)求x的平方根<br>sin(x)求x的正弦函数<br>cos(x)求x的余弦函数<br>atan2(x,y)求x/y的余切函数<br>log(x)求x的自然对数<br>exp(x)求x的e次方<br>int(x)求x的整数部分<br>rand()求0和1之间的随机数<br>srand(x)将x设置为rand()的种子数<p>index(in,find)在字符串in中寻找字符串find第一次出现的地方,返回值是字符串find出现在字符串in里面的位置。如果在字符串in里面找不到字符串find,则返回值为0。<br>例如:printindex("peanut","an")<br>显示结果3。<p>length(string)求出string有几个字符。<br>例如:length("abcde")<br>显示结果5。<p>match(string,regexp)在字符串string中寻找符合regexp的最长、最靠左边的子字符串。返回值是regexp在string的开始位置,即index值。match函数将会设置系统变量RSTART等于index的值,系统变量RLENGTH等于符合的字符个数。如果不符合,则会设置RSTART为0、RLENGTH为-1。<br>sprintf(format,expression1,...)和printf类似,但是sprintf并不显示,而是返回字符串。<br>例如:sprintf("pi=%.2f(approx.)",22/7)<br>返回的字符串为pi=3.14(approx.)<p>sub(regexp,replacement,target)在字符串target中寻找符合regexp的最长、最靠左的地方,以字串replacement代替最左边的regexp。<br>例如:<br>str="water,water,everywhere"<br>sub(/at/,"ith",str)<br>结果字符串str会变成<br>wither,water,everywhere<p>gsub(regexp,replacement,target)与前面的sub类似。在字符串target中寻找符合regexp的所有地方,以字符串replacement代替所有的regexp。<br>例如:str="water,water,everywhere"<br>gsub(/at/,"ith",str)<br>结果字符串str会变成<br>wither,wither,everywhere<p>substr(string,start,length)返回字符串string的子字符串,这个子字符串的长度为length,从第start个位置开始。<br>例如:substr("washington",5,3)返回值为ing如果没有length,则返回的子字符串是从第start个位置开始至结束。<br>例如:substr("washington",5)<br>返回值为ington。<p>tolower(string)将字符串string的大写字母改为小写字母。<br>例如:tolower("MiXeDcAsE123")<br>返回值为mixedcase123。<p>toupper(string)将字符串string的小写字母改为大写字母。<br>例如:toupper("MiXeDcAsE123")<br>返回值为MIXEDCASE123。<p>输入输出的内部函数<br>close(filename)将输入或输出的文件filename关闭。<br>system(command)此函数允许用户执行操作系统的指令,执行完毕后将回到gawk程序。<br>例如:BEGIN{system("ls")}<p><p><center><A HREF="#Content">[目录]</A></center><hr><br><A NAME="I124" ID="I124"></A><center><b><font size=+2>字符串和数字</font></b></center><br> 字符串就是一连串的字符,它可以被gawk逐字地翻译。字符串用双引号括起来。数字不能用双引号括起来,并且gawk将它当作一个数值。<br>例如:gawk'$1!="Tim"{print}'testfile<br>此命令将显示第一个字段和Tim不相同的所有记录。如果命令中Tim两边不用双引号,gawk将不能正确执行。<br>再如:gawk'$1=="50"{print}'testfile<br>此命令将显示所有第一个字段和50这个字符串相同的记录。gawk不管第一字段中的数值的大小,而只是逐字地比较。这时,字符串50和数值50并不相等。<p> 我们可以让动作显示一些比较复杂的结果。例如:<br>gawk'$1!="Tim"{print$1,$5,$6,$2}'testfile<p> 你也可以使用一些换码控制符格式化整行的输出。之所以叫做换码控制符,是因为gawk对这些符号有特殊的解释。下面列出常用的换码控制符:<p>\a警告或响铃字符。<br>\b后退一格。<br>\f换页。<br>\n换行。<br>\r回车。<br>\tTab。<br>\v垂直的tab。<p> 在gawk中,缺省的字段分隔符一般是空格符或TAB。但你可以在命令行使用-F选项改变字符分隔符,只需在-F后面跟着你想用的分隔符即可。<br>gawk-F";"'/tparker/{print}'/etc/passwd<br>在此例中,你将字符分隔符设置成分号。注意:-F必须是大写的,而且必须在第一个引号之前。<p><p><p><center><A HREF="#Content">[目录]</A></center><hr><br><A NAME="I125" ID="I125"></A><center><b><font size=+2>元字符</font></b></center><br> gawk语言在格式匹配时有其特殊的规则。例如,cat能够和记录中任何位置有这三个字符的字段匹配。但有时你需要一些更为特殊的匹配。如果你想让cat只和concatenate匹配,则需要在格式两端加上空格:<br>/cat/{print}<p>再例如,你希望既和cat又和CAT匹配,则可以使用或(|):<br>/cat|CAT/{print}<p> 在gawk中,有几个字符有特殊意义。下面列出可以用在gawk格式中的这些字符:<p>?^表示字段的开始。<br>例如:<br>$3~/^b/<br>如果第三个字段以字符b开始,则匹配。<p>?$表示字段的结束。<br>例如:<br>$3~/b$/<br>如果第三个字段以字符b结束,则匹配。<p>?.表示和任何单字符m匹配。<br>例如:<br>$3~/i.m/<br>如果第三个字段有字符i,则匹配。<p>?|表示“或”。<br>例如:<br>/cat|CAT/<br>和cat或CAT字符匹配。<p>?*表示字符的零到多次重复。<br>例如:<br>/UNI*X/<br>和UNX、UNIX、UNIIX、UNIIIX等匹配。<p>?+表示字符的一次到多次重复。<br>例如:<br>/UNI+X/<br>和UNIX、UNIIX等匹配。<p>?\{a,b\}表示字符a次到b次之间的重复。<br>例如:<br>/UNI\{1,3\}X<br>和UNIX、UNIIX和UNIIIX匹配。<p>??表示字符零次和一次的重复。<br>例如:<br>/UNI?X/<br>和UNX和UNIX匹配。<p>?[]表示字符的范围。<br>例如:<br>/I[BDG]M/<br>和IBM、IDM和IGM匹配<p>?[^]表示不在[]中的字符。<br>例如:<br>/I[^DE]M/<br>和所有的以I开始、M结束的包括三个字符的字符串匹配,除了IDM和IEM之外。<p><p><p><center><A HREF="#Content">[目录]</A></center><hr><br><A NAME="I126" ID="I126"></A><center><b><font size=+2>调用gawk程序</font></b></center><br> 当需要很多对模式和动作时,你可以编写一个gawk程序(也叫做gawk脚本)。在gawk程序中,你可以省略模式和动作两边的引号,因为在gawk程序中,模式和动作从哪开始和从哪结束时是很显然的。<p>你可以使用如下命令调用gawk程序:<br>gawk-fscriptfilename<br>此命令使gawk对文件filename执行名为script的gawk程序。<p> 如果你不希望使用缺省的字段分隔符,你可以在f选项后面跟着F选项指定新的字段分隔符(当然你也可以在gawk程序中指定),例如,使用分号作为字段分隔符:<br>gawk-fscript-F";"filename<p> 如果希望gawk程序处理多个文件,则把各个文件名罗列其后:<br>gawk-fscriptfilename1filename2filename3...<br>缺省情况下,gawk的输出将送往屏幕。但你可以使用Linux的重定向命令使gawk的输出送往一个文件:<br>gawk-fscriptfilename>save_file<p><p><p><center><A HREF="#Content">[目录]</A></center><hr><br><A NAME="I127" ID="I127"></A><center><b><font size=+2>BEGIN和END</font></b></center><br> 有两个特殊的模式在gawk中非常有用。BEGIN模式用来指明gawk开始处理一个文件之前执行一些动作。BEGIN经常用来初始化数值,设置参数等。END模式用来在文件处理完成后执行一些指令,一般用作总结或注释。<p> BEGIN和END中所有要执行的指令都应该用花括号括起来。BEGIN和END必须使用大写。<br>请看下面的例子:<p>BEGIN{print"Startingtheprocessthefile"}<br>$1=="UNIX"{print}<br>$2>10{printf"Thislinehasavalueof%d",$2}<br>END{print"Finishedprocessingthefile.Bye!"}<p> 此程序中,先显示一条信息:Startingtheprocessthefile,然后将所有第一个字段等于UNIX的整条记录显示出来,然后再显示第二个字段大于10的记录,最后显示信息:Finished processingthefile.Bye!。<p><p><p><center><A HREF="#Content">[目录]</A></center><hr><br><A NAME="I128" ID="I128"></A><center><b><font size=+2>变量</font></b></center><br> 在gawk中,可以用等号(=)给一个变量赋值:<br>var1=10<br> 在gawk中,你不必事先声明变量类型。<p>请看下面的例子:<br>$1=="Plastic"{count=count+1}<p> 如果第一个字段是Plastic,则count的值加1。在此之前,我们应当给count赋予过初值,一般是在BEGIN部分。<br>下面是比较完整的例子:<p>BEGIN{count=0}<br>$5=="UNIX"{count=count+1}<br>END{printf"%doccurrencesofUNIXwerefound",count}<p> 变量可以和字段和数值一起使用,所以,下面的表达式均为合法:<br>count=count+$6<br>count=$5-8<br>count=$5+var1<p> 变量也可以是格式的一部分,例如:<br>$2>max_value{print"Maxvalueexceededby",$2-max_value}<br>$4-var1<min_value{print"Illegalvalueof",$4}<p> gawk语言中有几个十分有用的内置变量,现在列于下面:<p>NR已经读取过的记录数。<br>FNR从当前文件中读出的记录数。<br>FILENAME输入文件的名字。<br>FS字段分隔符(缺省为空格)。<br>RS记录分隔符(缺省为换行)。<br>OFMT数字的输出格式(缺省为%g)。<br>OFS输出字段分隔符。<br>ORS输出记录分隔符。<br>NF当前记录中的字段数。<p> 如果你只处理一个文件,则NR和FNR的值是一样的。但如果是多个文件,NR是对所有的文件来说的,而FNR则只是针对当前文件而言。<br>例如:<br>NR<=5{print"Notenoughfieldsintherecord"}<br>检查记录数是否小于5,如果小于5,则显示出错信息。<br>FS十分有用,因为FS控制输入文件的字段分隔符。例如,在BEGIN格式中,使用如下的命令:<br>FS=":"<p><br><center><A HREF="#Content">[目录]</A></center><hr><br><A NAME="I129" ID="I129"></A><center><b><font size=+2>控制结构</font></b></center><br>if表达式<br>if表达式的语法如下:<br>if(expression){<br>commands<br>}<br>else{<br>commands<br>}<br>例如:<br>#asimpleifloop<br>(if($1==0){<br>print"This cell has a value of zero"<br>}<br>else{<br>printf"The value is %d\n",$1<br>})<br>再看下一个例子:<br>#anicely form attedi floop<br>(if($1>$2){<br>print"The first column is larger"<br>}<br>else{<br>print"The second column is larger"<br>})<p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -