对整个工程中大量的工作日志、检测结果文件进行分析过滤,并统计和排序。这个绝对不是人干的活,不信你试试,两千多个文件,一天你也统计不完吧?
目标:将Pclint的检测结果进行分析,对其中的错误和告警项进行统计,其他的Info等项不需要。在统计完成之后,对各模块的数量进行排序。并且对排名前5的上红榜。
目标:将Pclint的检测结果进行分析,对其中的错误和告警项进行统计,其他的Info等项不需要。在统计完成之后,对各模块的数量进行排序。并且对排名前5的上红榜。
输入:各个模块中每个c文件形成的检测报告txt文件;每个模块的相对路径。
输出:过滤、统计、排序结果。排名前五的“优秀模块”名单。
工具:Linux Shell, awk
TOT_PATH=/home/pclint/out
ERR_REP=$TOT_PATH/report.txt
ERR_FILE=$TOT_PATH/err_mp_tmp.txt
WAR_FILE=$TOT_PATH/warn_mp_tmp.txt
ERR_OFILE=$TOT_PATH/error_mp_sum.txt
WAR_OFILE=$TOT_PATH/warning_mp_sum.txt
TYPE=MP
TPATH=/home/target/lint/mp
ALLDIRS="ps/comm
ps/bssap
...
sig/tm
sig"
for TDIR in $ALLDIRS
do
cd $TPATH/$TDIR
rm error_total.txt
rm warning_total.txt
grep -c --regexp='[0-9]\{1,5\}..Error.[0-9]\{1,5\}' *.txt | sort -t: -r -n +1 >>error_total.txt
awk -F: '{(tot+=$2)}; END {print "'$TDIR':" tot} ' error_total.txt >>$ERR_FILE
grep -c --regexp='[0-9]\{1,5\}..Warning.[0-9]\{1,5\}' *.txt | sort -t: -r -n +1 >>warning_total.txt
awk -F: '{(tot+=$2)}; END {print "'$TDIR':" tot} ' warning_total.txt >>$WAR_FILE
done
rm $ERR_OFILE
rm $WAR_OFILE
sort -t: -r -n +1 $ERR_FILE >> $ERR_OFILE
echo -e "---------------------\n\n..$TYPE ERROR TOP 5" >> $ERR_REP
awk -F: '{if(NR<=5) print $0} {(tot+=$2)} END {print "ALL ERROR :" tot }' $ERR_OFILE >> $ERR_REP
rm $ERR_FILE
sort -t: -r -n +1 $WAR_FILE >> $WAR_OFILE
echo -e "\n..$TYPE WARNING TOP 5" >> $ERR_REP
awk -F: '{if(NR<=5) print $0} {(tot+=$2)} END {print "ALL WANRING :" tot }' $WAR_OFILE >> $ERR_REP
echo "" >> $ERR_REP
rm $WAR_FILE