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

📄 4.html

📁 网上一个牛人整理的关于linux内核编译
💻 HTML
📖 第 1 页 / 共 5 页
字号:
&nbsp;&nbsp;&nbsp; 在gawk中,运算符的优先权和一般的数学运算的优先权一样。例如:{print$1+$2*$3}显示第二个字段和第三个字段相乘,然后和第一个字段相加的结果。你也可以用括号改变优先次序。例如:{print($1+$2)*$3}显示第一个字段和第二个字段相加,然后和第三个字段相乘的结果。<p>
<p>
<p>



<center><A HREF="#Content">[目录]</A></center>
<hr><br><A NAME="I123" ID="I123"></A><center><b><font size=+2>内部函数</font></b></center><br>
&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>

⌨️ 快捷键说明

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