- 论坛徽章:
- 0
|
因我对shell不熟悉,勉强写了个脚本处理,里面用了几个循环,这可能是导致效率低的原因,脚本稍长,要麻烦各位高手看一下了,看是否有方法提高效率,谢谢!
#!/bin/sh
#############################################
#$1是传进来的第参数,即是要待处理的文件,为压缩文件
#############################################
do_000log='/ftp/hcf/do_list_log000.txt'
put_log='/ftp/hcf/'$1'mput_log.txt'
#do_000log='do_list_log000.txt'
FILE_tmp_log=$1'_tmp_log'
date > $FILE_tmp_log
echo $1 >> $FILE_tmp_log
##########################
#读数据的原路径,处理完之后的备份数据
#########################
source_path='/ftp/hcf/'
#source_path='/ftp/woffcust/'
goal_path1='/ftp/woffcust_backup/'
goal_path2='/ftp/realbill_backup/'
#cd $source_path
count_num=1
TransferNum =""
########################
#传进来的第一个参数
########################
FILE=$source_path$1
###############################################
#生成对应的文件名
##############################################
FILE_UN=$FILE'_UN'
FILE_result=$FILE'_result'
#FILE_TMP_TWO=$FILE'_TMP_TWO'
FILE_TMP=$FILE'_TMP'
c_time=$(date +%Y%m%d%H%M%S)
mput_name='log.Z_'$(date +%Y%m%d)
FILE_CTIME=$FILE'_'$c_time
#############################################
#用到的中间变量
#############################################
FILE_VA1=""
FILE_VA2=""
FILE_VA_TMP=""
###########################################
#长单普通单的解析规则
###########################################
substring1="解析清单"
substring2="转换后帐单科目:"
substring3="普通单 FILE:"
substring33="长单 FILE:"
substring4="Ebox Info:"
substring5="After Woff Ebox Info:"
substring6="销帐结果"
substring=""
zcat $FILE|awk -F '|' ' ! (/解析清单/ && $8+0 == 0 ){print $0}' >$FILE_UN
#cat $FILE > $FILE_UN
#exec < $FILE_UN
while read LINE
do
#################################################
#该case只能读到6个关键字,另一个关键字下面直接用
#################################################
case $count_num in
1) substring=$substring1
;;
2) substring=$substring2
;;
3) substring=$substring3
;;
4) substring=$substring4
;;
5) substring=$substring5
;;
6) substring=$substring6
;;
*)
;;
esac
#############################################################
#第2、4、6三行的关键字判断
############################################################
if [ $count_num -gt 1 ] && [ $count_num -lt 6 ] && [ $count_num -ne 3 ]; then
if [[ $LINE == *$substring* ]]; then
echo $LINE > $FILE_TMP
#echo $LINE >> err1.log
case $count_num in
2)FILE_VA1=`awk '{print $6}' $FILE_TMP`
FILE_VA_TMP=$FILE_VA_TMP'|'$FILE_VA1'|3'
#echo $FILE_VA_TMP
;;
4)FILE_VA1=`awk -F \[ '{print $3}' $FILE_TMP|awk -F \] '{print $1}'|awk -F \~ '{OFS="|";print $1,$2,$3,$4,$5,$6,$7,$8}'`
FILE_VA_TMP=$FILE_VA_TMP'|'$FILE_VA1'|0|0'
#echo $FILE_VA_TMP
;;
5)FILE_VA1=`awk -F \[ '{print $3}' $FILE_TMP|awk -F \] '{print $1}'|awk -F \~ '{OFS="|";print $1,$2,$3,$4,$5,$6,$7,$8}'`
FILE_VA_TMP=$FILE_VA_TMP'|'$FILE_VA1'|0|0'
#echo $FILE_VA_TMP
;;
*)
;;
esac
count_num=`expr $count_num + 1`
elif [[ $LINE == *$substring1* ]]; then
echo $LINE > $FILE_TMP
#cat err1.log >>err2.log
#echo $LINE > err1.log
FILE_VA1=`awk -F \[ '{print $1}' $FILE_TMP`
FILE_VA2=`awk -F \[ '{print $3}' $FILE_TMP|awk -F '|' '{OFS="|";print $1,$8}'`
FILE_VA_TMP=$FILE_VA1'|'$FILE_VA2
count_num=2
else
count_num=1
fi
#############################################################
#第1行的关键字判断
############################################################
elif [ $count_num -eq 1 ]; then
if [[ $LINE == *$substring* ]]; then
echo $LINE > $FILE_TMP
#echo $LINE > err1.log
FILE_VA1=`awk -F \[ '{print $1}' $FILE_TMP`
FILE_VA2=`awk -F \[ '{print $3}' $FILE_TMP|awk -F '|' '{OFS="|";print $1,$8}'`
FILE_VA_TMP=$FILE_VA1'|'$FILE_VA2
#echo $FILE_VA_TMP
count_num=`expr $count_num + 1`
else
#echo $LINE >> err2.log
count_num=1
fi
#############################################################
#第3行的关键字判断
############################################################
elif [ $count_num -eq 3 ]; then
if [[ $LINE == *$substring* ]]||[[ $LINE == *$substring33* ]]; then
count_num=`expr $count_num + 1`
else
#echo $LINE >> err2.log
count_num=1
fi
#############################################################
#第6行的关键字判断
############################################################
elif [ $count_num -eq 6 ]; then
if [[ $LINE == *$substring* ]]; then
echo $LINE > $FILE_TMP
FILE_VA1=`awk -F \[ '{print $3}' $FILE_TMP|awk -F '|' '{OFS="|";print $1,$3}'`
FILE_VA_TMP=$FILE_VA_TMP'|'$FILE_VA1
echo $FILE_VA_TMP >> $FILE_result
count_num=1
FILE_VA_TMP=""
elif [[ $LINE == *$substring1* ]]; then
echo $LINE > $FILE_TMP
#cat err1.log >>err2.log
#echo $LINE > err1.log
FILE_VA1=`awk -F \[ '{print $1}' $FILE_TMP`
FILE_VA2=`awk -F \[ '{print $3}' $FILE_TMP|awk -F '|' '{OFS="|";print $1,$8}'`
FILE_VA_TMP=$FILE_VA1'|'$FILE_VA2
count_num=2
else
#echo $LINE >> err1.log
#cat err1.log >>err2.log
count_num=1
fi
else
count_num=1
fi
done < $FILE_UN
#exec > /dev/null
#############################################################
#解析后的文件处理
############################################################
sed 's/ *| */|/g' $FILE_result|awk -F '|' '{OFS="|"; print $2,$26,$1,$5,$4,$3,\
$6+$7+$8+$9+$10+$11+$12+$13+$14+$15+0-$16-$17-$18-$19-$20-$21-$22-$23-$24-$25,\
$6+$7+$8+$9+$11+$12+$14+$15+0-$16-$17-$18-$19-$21-$22-$24-$25,\
$10+$13+0-$20-$23,$16+$17+$18+$19+$21+$22+$24+$25+0,$20+$23+0,$6+$7+$8+$9+$11+$12+$14+$15+0,$10+$13+0,\
$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25"|"}' > $FILE_CTIME
#############################################################
#各字段规则说明
############################################################
#############################################################
#删除中间数据
############################################################
rm $FILE_UN
rm $FILE_result
rm $FILE_TMP
#######################################################################
#在这里配置上FTP,FTP完成后压缩搬到备份文件夹,并把源文件也搬到备份目录
#######################################################################
#put_log='/ftp/hcf/'$1'mput_log.txt'
if [ -s $put_log ]; then
rm $put_log
TransferNum =""
fi
#begin ftp
#ftp -n -i -v << ! > $put_log
#open IP
#user username passowrd
#binary
#prompt
#mput hcf.log
#bye
#!
if [ -s $put_log ]
then
TransferNum=`awk '/^226/' $put_log'`
if [ $TransferNum =="" ]
then
echo "ftp failed!" >> $FILE_tmp_log
else
echo "ftp success!" >> $FILE_tmp_log
#mv $1 $goal_path1
#mv $FILE_CTIME $goal_path2
cp $1 $goal_path1
cp $FILE_CTIME $goal_path2
fi
fi
date >> $FILE_tmp_log
cat $FILE_tmp_log >> $do_000log
rm $FILE_tmp_log |
|