首页 > 代码库 > awk数组、函数、脚本

awk数组、函数、脚本

一、awk关联数组

index-expression:

(1) 可使用任意字符串;字符串要使用双引号括起来

(2) 如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其值初始化为"空串"

若要判断数组中是否存在某元素,要使用"index in array"格式进行遍历

示例:

weekdays["mon"]="Monday"

awk ‘BEGIN{weekdays["mon"]="Monday";weekdays["tue"]="Tuesday";print weekdays["mon"]}‘

awk ‘!a[$0]++‘ dupfile


若要遍历数组中的每个元素,要使用for循环

for(var in array) {for-body}

注意:var会遍历array的每个索引

示例:

awk ‘BEGIN{weekdays["mon"]="Monday";weekdays["tue"]="Tuesday";for(i in weekdays) {print weekdays[i]}}‘

netstat -tan | awk ‘/^tcp\>/{state[$NF]++}END{for(index in state) { print index,state[index]}}‘

awk ‘{ip[$1]++}END{for(i in ip) {print i,ip[i]}}‘ /var/log/httpd/access_log


二、awk数值处理

rand():返回0和1之间一个随机数

awk ‘BEGIN{srand(); for (i=1;i<=10;i++)print int(rand()*100) }‘ 

字符串处理:

length([s]):返回指定字符串的长度

sub(r,s,[t]):对t字符串进行搜索r表示的模式匹配的内容,并将第一个匹配的内容替换为s

echo "2008:08:08 08:08:08" | awk ‘sub(/:/,"-",$1)‘

gsub(r,s,[t]):对t字符串进行搜索r表示的模式匹配的内容,并全部替换为s所表示的内容

echo "2008:08:08 08:08:08" | awk ‘gsub(/:/,"",$1)‘

split(s,array,[r]):以r为分隔符,切割字符s,并将切割后的结果保存至

array所表示的数组中,第一个索引值为1,第二个索引值为2,…

netstat -tan | awk ‘/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for (i in count) {print i,count[i]}}‘


三、awk函数

格式:

function name ( parameter, parameter,  ... ) {

statements

return expression

}


示例:

#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


四、awk中调用shell命令

system命令

空格是awk中的字符串连接符,如果system中需要使用awk中的变量可以使用空格分隔,或者说除了awk的变量外其他一律用""引用起来

awk BEGIN‘{system("hostname") }‘ 

awk ‘BEGIN{score=100; system("echo  your score 

is " score) }‘


awk脚本

将awk程序写成脚本,直接调用或执行

示例:

#cat f1.awk

if($3>=1000)print $1,$3} 

{if($3>=1000)print $1,$3} 

#chmod +x f2.awk

#f2.awk –F:  /etc/passwd


五、awk脚本传递参数

格式:

awkfile  var=value var2=value2... Inputfile

示例:

#cat  test.awk   

#awk -F: -f f1.awk /etc/passwd 

#cat f2.awk 

#!/bin/awk –f

#this is a awk script

#!/bin/awk –f

{if($3 >=min && $3<=max)print $1,$3} 

#chmod +x test.awk

#test.awk -F: min=100 max=200  /etc/passwd

本文出自 “爱情防火墙” 博客,请务必保留此出处http://183530300.blog.51cto.com/894387/1854717

awk数组、函数、脚本