shell 按行读取文件,涉及读配置文件

logfile=/tmp/test.log
datafile=datal
words1=^^suc^^
words2=
words3=
numfile=nu


#读config 配置文件
while read line;
do 
eval "$line"
done <config
#配置项赋值
numberfile=$numfile
keyword=$words1
logfile=$logfile
datafile=$datafile

#创建记录行号的文件
touch $numberfile
#读取上一次的行号
a=`cat $numberfile`
line=0
#读取本次行号
newline=`wc -l $datafile | awk '{print $1}'`
#比较上一次($numberfile中的数字)与本次的行号
#本次行号增加,从上一次的位置开始读
if [ $a -lt $newline ];then
line=$a
fi
#行号相等,退出程序
if [ $a -eq $newline ];then
exit
fi
#行号减少,从0开始读
if [ $a -gt $newline ];then
line=0
fi
#匹配关键字的特殊字符处理
word=`echo  $keyword | sed -e 's/\^/\\\^/g'`
#匹配过程
b=`awk 'NR>'$line'{if($0!~/'\$word'/) {if($0!~/^[[:space:]]*$/){print "["$0"]"}}}' $datafile`
#屏幕打印的消息
echo $b | awk '{if($0!~/^\s*$/) {print "出现不正常:"$0} else {print "判断时段内正常"}}'
#写入此次的行号,下次用
newline=`wc -l $datafile | awk '{print $1}'`
echo $newline>$numberfile

注意linux hp-ux平台对正则匹配$的情况
($0!~/'\$word'/
注意-gt  -lt -eq对数值的比较,不用<>=

if [ $a -gt $newline ]
注意$line 引用awk外部命令用单引号

 'NR>'$line'
注意赋值的时,不是$line=$a

line=$a
注意[[:space:]] = \s

($0!~/^[[:space:]]*$/)


该脚本在实际运行过程当中,遇到 awk 处理行超过3000字节数的警告。

修改如下:

# echo $b | awk '{if($0!~/^\s*$/) {print "出现不正常:"$0} else {print "判断时段内正常"}}'
if [ `echo '$b' | grep "^\s*$"` ];then
echo "该监控时段内未出现异常!"
else
echo "产生异常,异常信息是:""$b"
fi

输出结果为多行:

aaaa

bbbb

cccc

要使结果多行变一行:

echo "产生异常,异常信息是:""$b" | xargs

转载著名出处,尊重作者No. Liu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值