awk基本用法和工作原理详解(5)

示例:

awk 'BEGIN{srand(); for (i=1;i<=10;i++)print int(rand()*100) }' echo "2008:08:08 08:08:08" | awk 'sub(/:/,“-",$1)' echo "2008:08:08 08:08:08" | awk ‘gsub(/:/,“-",$0)' netstat -tan | awk '/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for (i in count) {print i,count[i]}}' awk BEGIN'{system("hostname") }' awk 'BEGIN{score=100; system("echo your score is " score) }'

自定义函数,格式为

function fname ( arg1,arg2 , ... ) { statements return expr }

自定义函数中fname为函数名,arg1...为函数的参数,statements是动作语言,return expr为由statements的结果从而决定最终函数所显示的内容。
示例:

cat fun.awk function max(v1,v2) { v1>v2?var=v1:var=v2 return var } BEGIN{a=3;b=2;print max(a,b)} awk –f fun.awk 6.awk的脚本

awk的脚本就是将awk程序写成脚本形式,来直接调用或直接执行。例如上面写自定义函数的样子也算是脚本。

格式1: BEGIN{} pattern{} END{} 格式2: \#!/bin/awk -f \#add 'x' right BEGIN{} pattern{} END{}

格式1假设为f1.awk文件,格式2假设为f2.awk文件,那么用法是:

awk [-v var=value] f1.awk [file]
f2.awk [-v var=value] [var1=value1] [file]

对于awk [-v var=value] f1.awk [file]来说,很好理解,就是把处理阶段放到一个文件而已,真正展开后,也就是普通的awk语句。
对于f2.awk [-v var=value] [var1=value1] [file]来说, [-v var=value]是在BEGIN之前设置的变量值,[var1=value1]是在BEGIN过程之后进行的,也就是说直到首行输入完成后,这个变量才可用,这就想awk脚本黄总传递参数了。
示例:

cat f1.awk {if($3>=1000)print $1,$3} awk -F: -f f1.awk /etc/passwd cat f2.awk #!/bin/awk –f #this is a awk script {if($3>=1000)print $1,$3} #chmod +x f2.awk f2.awk –F: /etc/passwd cat test.awk #!/bin/awk –f {if($3 >=min && $3<=max)print $1,$3} #chmod +x test.awk test.awk -F: min=100 max=200 /etc/passwd

到此为止算是差不多了,实际上awk的内容好多,这里只是写了所知道的,更详细的可看man awk来获取更加全面的知识。上述若有错误的地方,欢迎提出!谢谢~

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13429.html