shell与awk的脚本运用(一)


#!/bin/bash#shell声明
b=`ls *.txt`  #列出当前目录下所有log结尾的文件 
for log in $b #循环每一个log文件
do
   b=`awk 'END{print NR}' $log`  #获取当前循环文化最后一行的行号
   for i in `seq $b`   #循环多少次,一行循环一次
   do
     ybs=`cat $log |grep 2222 |awk -v bl=$i -F'|' 'NR==bl{print $12 - $13}'` #grep出当前文件带2222的信息,然后awk定义当前行号为bl,以|为分隔符,然后输出$12减去$13的和
     userid=`cat $log|grep 2222|awk -v bl=$i -F'|' 'NR==bl{print $6}'`    #大致同上,只是输出userid字段
     username=`cat $log|grep 2222|awk -v bl=$i -F'|' 'NR==bl{print $7}'` #大致同上,只是输出username字段
     echo "$userid  $ybs $username" >> /tmp/test/info.txt  #将他们输出到info.txt文件中,这样就获取到了所有符合条件的userid,ybs,username
   done
done
b=`cat /tmp/test/info.txt |sort -k 1,1 -u |awk '{print $1}'` #获取所有玩家去重后的id
for i in $b  #循环每一个玩家
do
   zybs=`cat /tmp/test/info.txt |grep $i |awk -v bl=0 '{bl=bl+$2} END {print bl}'` #计算出每一个玩家花费元宝的总数
   name=`cat /tmp/test/info.txt |grep $i |awk '{print $3}'|uniq`    #通过id查找到玩家的昵称
   echo $i $zybs $name >> /tmp/test/info_2.txt   #将玩家id,昵称,消费元宝总数输出到info_2.txt文件中
done

你可能感兴趣的:(shell,三剑客)