awk 的实践

需求:大量的数据sql语句存放六个文件夹里面,需要从里计算出每一个文件的该状态为3的记录数,最后总结一下总的记录数。并且输入参数可以1到6个文件之间

数据格式 insert into xxx(x1,x2,x3.....) values(a1,a2,a3....)

# !bin/sh


echo "begin to count the installed number:"
echo "The argument number is : $#"
count=0

case $# in
1)
echo  "execute 1 filename ,as list:$1"
awk -F "," 'BEGIN{count=0;} {if($29 ~/3/)count++;} END{print "filename:"FILENAME", installCount:",count}' $1
;;
2)
echo  "execute 2 filenames ,as list:$1,$2"
awk -F "," 'BEGIN{c1=0;c2=0;print  "filename\tinstalled"} NR==FNR{if($29 ~/3/)c1++;next;}{if($29 ~/3/)c2++;} END{printf("%s\t%s\n%s\t%s\n",ARGV[1],c1,ARGV[2],c2);total=c1+c2;print "total\t",total;}' $1 $2
;;
3)
echo  "execute 3 filenames,as list:$1,$2,$3"
awk -F "," 'BEGIN{c1=0;c2=0;c3=0;print  "filename\tinstalled"}
            FILENAME==ARGV[1]{if($29 ~/3/)c1++}
            FILENAME==ARGV[2]{if($29 ~/3/)c2++}
            FILENAME==ARGV[3]{if($29 ~/3/)c3++}
            END{printf("%s\t%s\n%s\t%s\n%s\t%s\n",ARGV[1],c1,ARGV[2],c2,ARGV[3],c3);total=c1+c2+c3;print "total\t",total;}' $1 $2 $3
;;
4)
echo  "execute 4 filenames  as list:$1,$2,$3,$4"
awk -F "," 'BEGIN{c1=0;c2=0;c3=0;c4=0;print  "filename\tinstalled"}
            FILENAME==ARGV[1]{if($29 ~/3/)c1++}
            FILENAME==ARGV[2]{if($29 ~/3/)c2++}
            FILENAME==ARGV[3]{if($29 ~/3/)c3++}
            FILENAME==ARGV[4]{if($29 ~/3/)c4++}
            END{printf("%s\t%s\n%s\t%s\n%s\t%s\n%s\t%s\n",ARGV[1],c1,ARGV[2],c2,ARGV[3],c3,ARGV[4],c4);total=c1+c2+c3+c4;print "total\t",total;}' $1 $2 $3 $4
;;
5)
echo  "execute 5 filenames list:$1,$2,$3,$4,$5"
awk -F "," 'BEGIN{c1=0;c2=0;c3=0;c4=0;c5=0;print  "filename\tinstalled"}
            FILENAME==ARGV[1]{if($29 ~/3/)c1++}
            FILENAME==ARGV[2]{if($29 ~/3/)c2++}
            FILENAME==ARGV[3]{if($29 ~/3/)c3++}
            FILENAME==ARGV[4]{if($29 ~/3/)c4++}
            FILENAME==ARGV[5]{if($29 ~/3/)c5++}
            END{printf("%s\t%s\n%s\t%s\n%s\t%s\n%s\t%s\n%s\t%s\n",ARGV[1],c1,ARGV[2],c2,ARGV[3],c3,ARGV[4],c4,ARGV[5],c5);total=c1+c2+c3+c4+c5;print "total\t",total;}' $1 $2 $3 $4 $5
;;
*)
echo  "execute 6 filenames list:$1,$2,$3,$4,$5,$6"
awk -F "," 'BEGIN{c1=0;c2=0;c3=0;c4=0;c5=0;c6=0;print  "filename\tinstalled"}
            FILENAME==ARGV[1]{if($29 ~/3/)c1++}
            FILENAME==ARGV[2]{if($29 ~/3/)c2++}
            FILENAME==ARGV[3]{if($29 ~/3/)c3++}
            FILENAME==ARGV[4]{if($29 ~/3/)c4++}
            FILENAME==ARGV[5]{if($29 ~/3/)c5++}
            FILENAME==ARGV[6]{if($29 ~/3/)c6++}
            END{printf("%s\t%s\n%s\t%s\n%s\t%s\n%s\t%s\n%s\t%s\n%s\t%s\n",ARGV[1],c1,ARGV[2],c2,ARGV[3],c3,ARGV[4],c4,ARGV[5],c5,ARGV[6],c6);total=c1+c2+c3+c4+c5+c6;print "total\t",total;}' $1 $2 $3 $4 $5 $6
;;
esac

转载于:https://my.oschina.net/u/566829/blog/225290

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值