创建测试文件如下:
#创建测试文件
for i in `ls ../`;do echo $i,2,3,4,5 >>input;done
input内容:
a+b.sh,2,3,4,5
awk,2,3,4,5
case.sh,2,3,4,5
for.sh,2,3,4,5
grep.all,2,3,4,5
if.sh,2,3,4,5
param.sh,2,3,4,5
sed,2,3,4,5
test,2,3,4,5
while.sh,2,3,4,5
a+b.sh,2,3,4,5
awk,2,3,4,5
case.sh,2,3,4,5
for.sh,2,3,4,5
grep.all,2,3,4,5
if.sh,2,3,4,5
param.sh,2,3,4,5
sed,2,3,4,5
test,2,3,4,5
while.sh,2,3,4,5
测试如下:
#统计空白行
awk '/^$/{print x+=1}' input
#查找与替换
awk -F',' '{gsub(/while.sh/,"zhang san",$0)}{print $0}' input >input
#计算平均数
awk -F',' '{total=$2+$3+$4+$5;avg=total/4}{print $1,avg}' input
#有重复行情况下的平均数
awk -F',' '{total=$2+$3+$4+$5;avg=total/4;totalall[$1]+=avg;count[$1]++}END{for (i in totalall){print i,totalall[i]/count[i]}}' input
#匹配正则
awk -F':' '$0!~/root/{print $0}' /etc/passwd
#IF的用法,输出$为root
awk -F':' '{if($1=="root"){print $0}}' /etc/passwd
注意:awk是按照行循环并可以对每个列进行处理,功能强大。BEGIN里是循环前的处理,END里是循环后的处理。可以定义数组与变量,for、if等的用法与shell里for格式还是不一样的。
其他:
SED常见练习题
http://blog.csdn.net/kakane/article/details/7367133