awk常用例子,awk 用法及注解,awk内置变量,awk操作符,awk 内置字符串函数,awk编写脚本的例子。
一、awk 的用法及注解
awk -F: condition dist //这里的:是指以:为分隔,如果不用-F则默认为空格。
$0 //显示所有 $1 //显示第一列 $2 //显示第二列 $3 //显示第三列 $4 //显示第四列
例子:
[root@xiao_linux mybash]# cat >fawk.a
1 xiao25 beijing9000 2 liuwenjing 24 beijing5000 3 weijianjun 29 shanghai8000 4 wanmingyang 28 beijing5000 5 tianzhiyu 25 beijing5500 6 zhouhaoxing 23 beijing5000 ctrl+d //以上建立一个文件来做相应的操作。 awk '{print $2,$4}' fawk.a //这里的意思是找到第二列及第四列的内容,并且显示出来。
awk 'BEGIN {print"name address\n----------------"}{print $1,$4}' fawk.a
如果要查找,可以用:
awk '{if($2~/wei/) print $0}' fawk.a //这是精确查找
awk '$0~/[Ll]iu/ {print $1,$2 " is my wife"}' fawk.a //查找出来的内容进行添加
二、awk内置变量
awk '{print $0} END {print "总共次数:" NR}' fawk.a
ll | awk '{print $0}END {print "总记录:"NR}'
NF //显示每行记录中有多少条域,简单来理解就是有多少列
//同时还有一个强大的功能,请看例子:
pwd /home/myfile echo $PWD | awk -F/ '{print $NF}' //将取出文件名myfile"/"为分隔符
三、awk 操作符(>,==,>=.....不全介绍) ll | awk '{name=$9;tt=$7;if(tt>=13) print "文件名:name",$7,$9 }' ll | awk 'BEGIN{NUMS=13}{if($7>=NUMS) print $7,$9}' //这一条命令也和上面同意思,可以看出可以在BEGIN中先定义一个变量,这是一个很不错的想法
还有就是域可以进行数值运算(数值域)
$7=$7-1 //意指值减1
ll | awk '{$10=$7+1;print $0}' //注意上面的10域是新建的,本来是没有,意思是把7域中的数对应加1,然后赋到10域上,怎么样是不是很爽呢。
统计某列的总值
ll | awk '{total+=$7;print $7};END{print "总计:"total}' //统计第七列的总和
ll | awk '{if($7>=NUMS) print $7,$9}' NUMS=13 //这是给赋值,当然你可以在前面定义变量,后面引用时$NUMS //也就是说允许环境变量 ll | awk 'total+=$5;END{print "总容量:" total}'
四、awk 内置字符串函数
gsub(r,s) //$0 中,s替换r
ll | awk 'gsub(/xiao/,"hehe")' 以上两个效果是一样的,但是第一条命令只是产生发生效果的东东。
例子:
ll | awk '{print length($4)}' ll | awk '{print match($4,/root/)}' | sed -n '2,$p'
more fawk.a | awk '{printf("%15s\n",$2)}'
ll | awk '{total+=$5}{print $0} END{print "总数:"total}'
cat >it.awk
chmod a+x it.awk
例2:
#!/bin/awk -f
{total+=$3 printf("%-16s %-10s\n",$2,$3)} END{print "ok:" total}
数组处理:
BEGIN{
recor="343@434@24324" split(recor,array,"@")} END{ for(i in array) {print array[i]} } |