⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4.html

📁 介绍linux下文件和设备编程
💻 HTML
📖 第 1 页 / 共 5 页
字号:
&nbsp;&nbsp;&nbsp; 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(&quot;peanut&quot;,&quot;an&quot;)<br>显示结果3。<p>length(string)求出string有几个字符。<br>例如:length(&quot;abcde&quot;)<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(&quot;pi=%.2f(approx.)&quot;,22/7)<br>返回的字符串为pi=3.14(approx.)<p>sub(regexp,replacement,target)在字符串target中寻找符合regexp的最长、最靠左的地方,以字串replacement代替最左边的regexp。<br>例如:<br>str=&quot;water,water,everywhere&quot;<br>sub(/at/,&quot;ith&quot;,str)<br>结果字符串str会变成<br>wither,water,everywhere<p>gsub(regexp,replacement,target)与前面的sub类似。在字符串target中寻找符合regexp的所有地方,以字符串replacement代替所有的regexp。<br>例如:str=&quot;water,water,everywhere&quot;<br>gsub(/at/,&quot;ith&quot;,str)<br>结果字符串str会变成<br>wither,wither,everywhere<p>substr(string,start,length)返回字符串string的子字符串,这个子字符串的长度为length,从第start个位置开始。<br>例如:substr(&quot;washington&quot;,5,3)返回值为ing如果没有length,则返回的子字符串是从第start个位置开始至结束。<br>例如:substr(&quot;washington&quot;,5)<br>返回值为ington。<p>tolower(string)将字符串string的大写字母改为小写字母。<br>例如:tolower(&quot;MiXeDcAsE123&quot;)<br>返回值为mixedcase123。<p>toupper(string)将字符串string的小写字母改为大写字母。<br>例如:toupper(&quot;MiXeDcAsE123&quot;)<br>返回值为MIXEDCASE123。<p>输入输出的内部函数<br>close(filename)将输入或输出的文件filename关闭。<br>system(command)此函数允许用户执行操作系统的指令,执行完毕后将回到gawk程序。<br>例如:BEGIN{system(&quot;ls&quot;)}<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>&nbsp;&nbsp;&nbsp; 字符串就是一连串的字符,它可以被gawk逐字地翻译。字符串用双引号括起来。数字不能用双引号括起来,并且gawk将它当作一个数值。<br>例如:gawk'$1!=&quot;Tim&quot;{print}'testfile<br>此命令将显示第一个字段和Tim不相同的所有记录。如果命令中Tim两边不用双引号,gawk将不能正确执行。<br>再如:gawk'$1==&quot;50&quot;{print}'testfile<br>此命令将显示所有第一个字段和50这个字符串相同的记录。gawk不管第一字段中的数值的大小,而只是逐字地比较。这时,字符串50和数值50并不相等。<p>&nbsp;&nbsp;&nbsp; 我们可以让动作显示一些比较复杂的结果。例如:<br>gawk'$1!=&quot;Tim&quot;{print$1,$5,$6,$2}'testfile<p>&nbsp;&nbsp;&nbsp; 你也可以使用一些换码控制符格式化整行的输出。之所以叫做换码控制符,是因为gawk对这些符号有特殊的解释。下面列出常用的换码控制符:<p>\a警告或响铃字符。<br>\b后退一格。<br>\f换页。<br>\n换行。<br>\r回车。<br>\tTab。<br>\v垂直的tab。<p>&nbsp;&nbsp;&nbsp; 在gawk中,缺省的字段分隔符一般是空格符或TAB。但你可以在命令行使用-F选项改变字符分隔符,只需在-F后面跟着你想用的分隔符即可。<br>gawk-F&quot;;&quot;'/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>&nbsp;&nbsp;&nbsp; gawk语言在格式匹配时有其特殊的规则。例如,cat能够和记录中任何位置有这三个字符的字段匹配。但有时你需要一些更为特殊的匹配。如果你想让cat只和concatenate匹配,则需要在格式两端加上空格:<br>/cat/{print}<p>再例如,你希望既和cat又和CAT匹配,则可以使用或(|):<br>/cat|CAT/{print}<p>&nbsp;&nbsp;&nbsp; 在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>&nbsp;&nbsp;&nbsp; 当需要很多对模式和动作时,你可以编写一个gawk程序(也叫做gawk脚本)。在gawk程序中,你可以省略模式和动作两边的引号,因为在gawk程序中,模式和动作从哪开始和从哪结束时是很显然的。<p>你可以使用如下命令调用gawk程序:<br>gawk-fscriptfilename<br>此命令使gawk对文件filename执行名为script的gawk程序。<p>&nbsp;&nbsp;&nbsp; 如果你不希望使用缺省的字段分隔符,你可以在f选项后面跟着F选项指定新的字段分隔符(当然你也可以在gawk程序中指定),例如,使用分号作为字段分隔符:<br>gawk-fscript-F&quot;;&quot;filename<p>&nbsp;&nbsp;&nbsp; 如果希望gawk程序处理多个文件,则把各个文件名罗列其后:<br>gawk-fscriptfilename1filename2filename3...<br>缺省情况下,gawk的输出将送往屏幕。但你可以使用Linux的重定向命令使gawk的输出送往一个文件:<br>gawk-fscriptfilename&gt;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>&nbsp;&nbsp;&nbsp; 有两个特殊的模式在gawk中非常有用。BEGIN模式用来指明gawk开始处理一个文件之前执行一些动作。BEGIN经常用来初始化数值,设置参数等。END模式用来在文件处理完成后执行一些指令,一般用作总结或注释。<p>&nbsp;&nbsp;&nbsp; BEGIN和END中所有要执行的指令都应该用花括号括起来。BEGIN和END必须使用大写。<br>请看下面的例子:<p>BEGIN{print&quot;Startingtheprocessthefile&quot;}<br>$1==&quot;UNIX&quot;{print}<br>$2&gt;10{printf&quot;Thislinehasavalueof%d&quot;,$2}<br>END{print&quot;Finishedprocessingthefile.Bye!&quot;}<p>&nbsp;&nbsp;&nbsp; 此程序中,先显示一条信息: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>&nbsp;&nbsp;&nbsp; 在gawk中,可以用等号(=)给一个变量赋值:<br>var1=10<br>&nbsp;&nbsp;&nbsp; 在gawk中,你不必事先声明变量类型。<p>请看下面的例子:<br>$1==&quot;Plastic&quot;{count=count+1}<p>&nbsp;&nbsp;&nbsp; 如果第一个字段是Plastic,则count的值加1。在此之前,我们应当给count赋予过初值,一般是在BEGIN部分。<br>下面是比较完整的例子:<p>BEGIN{count=0}<br>$5==&quot;UNIX&quot;{count=count+1}<br>END{printf&quot;%doccurrencesofUNIXwerefound&quot;,count}<p>&nbsp;&nbsp;&nbsp; 变量可以和字段和数值一起使用,所以,下面的表达式均为合法:<br>count=count+$6<br>count=$5-8<br>count=$5+var1<p>&nbsp;&nbsp;&nbsp; 变量也可以是格式的一部分,例如:<br>$2&gt;max_value{print&quot;Maxvalueexceededby&quot;,$2-max_value}<br>$4-var1&lt;min_value{print&quot;Illegalvalueof&quot;,$4}<p>&nbsp;&nbsp;&nbsp; gawk语言中有几个十分有用的内置变量,现在列于下面:<p>NR已经读取过的记录数。<br>FNR从当前文件中读出的记录数。<br>FILENAME输入文件的名字。<br>FS字段分隔符(缺省为空格)。<br>RS记录分隔符(缺省为换行)。<br>OFMT数字的输出格式(缺省为%g)。<br>OFS输出字段分隔符。<br>ORS输出记录分隔符。<br>NF当前记录中的字段数。<p>&nbsp;&nbsp;&nbsp; 如果你只处理一个文件,则NR和FNR的值是一样的。但如果是多个文件,NR是对所有的文件来说的,而FNR则只是针对当前文件而言。<br>例如:<br>NR&lt;=5{print&quot;Notenoughfieldsintherecord&quot;}<br>检查记录数是否小于5,如果小于5,则显示出错信息。<br>FS十分有用,因为FS控制输入文件的字段分隔符。例如,在BEGIN格式中,使用如下的命令:<br>FS=&quot;:&quot;<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&quot;This cell has a value of zero&quot;<br>}<br>else{<br>printf&quot;The value is %d\n&quot;,$1<br>})<br>再看下一个例子:<br>#anicely form attedi floop<br>(if($1&gt;$2){<br>print&quot;The first column is larger&quot;<br>}<br>else{<br>print&quot;The second column is larger&quot;<br>})<p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -