shell与awk的脚本运用(二)

话不多说,老板,上硬菜


#!/bin/bash #shell脚本声明
a=`ls log*`#将当前目录下的log开头的日志文件名称存入变量a
for i in $a  #开始循环变量a
do #进入循环
   echo $i  #输出文件名
   b=`cat $i|awk -F'|' '{print $NF"-"NR}'`#定义变量b为文件中每一行最后一个以|为分隔符的参数和行号,输出来是这样的:11-1,11是最后一个参数,1是行号
   for x in $b #开始循环变量b,循环每一行的最后一个参数和行号
   do #进入循环
    c=`echo $x|awk -F'-' '{print $1}'` #定义变量c为最后一个参数的值
    v=`echo $x|awk -F'-' '{print $2}'` #定义变量v为行号
    if [ "$c" == "30" ];then  #判断最后一个参数是否为30
        pd=`echo $x|awk -F'|' '{print $11}'` #如果条件为真,获取那一行$11的值并存为变量pd
        if [[ $pd -gt 10000 ]]  #判断pd的值是否大于10000
        then
           d=`awk -v bl=$v 'NR==bl{print}' $i` #如果大于10000则将那一行的数据存为变量d
           echo "$d" >> /tmp/$i.txt  #将那一行的数据追加到/tmp/目录下的新文件中,新文件名字为当前循环的日志文件名
        elif [[ $pd -lt 9900 ]]   #判断pd的值是否小于9900
        then
           d=`awk -v bl=$v 'NR==bl{print}' $i` #如果小于9900则将那一行的数据存为变量d
           echo "$d" >> /tmp/$i.txt #将那一行的数据追加到/tmp/目录下的新文件中,新文件名字为当前循环的日志文件名

        fi #结束判断
    fi #结束判断
   done #结束循环
   echo "OK!" #一个文件循环完之后输出OK!然后进入下一次循环
done #循环结束


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