一、linuxjishu/13830.html target=_blank class=infotextkey>awk 的用法及注解
例子:
awk '{print $2,$4}' fawk.a //这里的意思是找到第二列及第四列的内容,并且显示出来。
awk 'BEGIN {print"name addressn----------------"}{print $1,$4}' fawk.a
指加上头部内容
awk 'BIGIN {print"name addressn------------"} {print $1,$4} END {print "content already end"}' fawk.a
这加了尾内容
如果要查找,可以用:
awk '{if($2~/wei/) print $0}' fawk.a //这是精确查找
awk '$0~/wei/' fawk.a //这条就OK了。
awk '$2=="xiao" print $0' fawk.a //只匹配xiao
awk '$0!~/liu/' fawk.a //除了liu的都显示
awk '$0~/[Ll]iu/ {print $1,$2 " is my wife"}' fawk.a //查找出来的内容进行添加
awk '{if($5>=5500) print $1,$2,$5}' fawk.a
awk '$0~/(xiao|liu)/' fawk.a
awk '{if($2=="xiao" && $3=="beijing") print $0}' fawk.a
awk '{if($2=="xiao" || $2~/liu/) print $0}' fawk.a
二、awk内置变量
NR //打印出文件的记录个数
NF //显示每行记录中有多少条域,简单来理解就是有多少列
三、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中先定义一个变量,这是一个很不错的想法
还有就是域可以进行数值运算(数值域)
统计某列的总值
四、awk 内置字符串函数
gsub(r,s) //$0 中,s替换r
gsub(r,s,n) //$n 中,s替换r
length(s) //s的长度
index(s,t) //返回s中t的第一位置
match(s,t) //在s中查找t匹配的,t可以用正则表达式 查找成功返回值,不成功返回"0"
split(s,a,t) //t为分隔标准,s为字符,a为数组,a[1],a[2]....
sub(t,s) // t 为查找的,s为替换 查找第一次出行的
substr($1,1,6) // $1是指域 这个和php是一样的,不讲
printf() //这个和c差不多,不讲
ll | awk 'gsub(/xiao/,"hehe")'
ll | sed 's/xiao/hehe'
以上两个效果是一样的,但是第一条命令只是产生发生效果的东东。
例子:
ll | awk '{print length($4)}'
awk '{print lenght("hello,nice to see you!")}'
ll | awk '{print match($4,/root/)}' | sed -n '2,$p'
more fawk.a | awk '{printf("%15sn",$2)}'
附,awk 编写脚本
ll | awk '{total+=$5}{print $0} END{print "总数:"total}'
cat >it.awk
#!/bin/awk -f
(total+=$3)
END{print "totals age:"total}
chmod a+x it.awk
./it.awk myfile
例2:
数组处理: