我制作的一个脚本有问题,执行时间太长(比如 24 分钟),但时间是可变的(取决于日志),在不久的将来,时间肯定会增加。
麻烦在一个嵌套的for循环中:
obtener_ErroresLanzados()
{
#Buscamos los equipos del log lanzados_a_pendientes en los logs de instala_sw_qcc para ver el porque no se han lanzado.
totalLanzadosPendientes=`cat $rutaTemporales/lanzados_a_pendientes.log | wc -l`;
lanzadosPendientes=$(cat $rutaTemporales/lanzados_a_pendientes.log);
#grep "$paqueteBuscado" instala_sw_qcc_2012*.log | cut -f 1 -d ":" > $rutaTemporales/logsErrores.log;
find $rutaTrazas -name "instala_sw_qcc_2012*" | xargs grep -l "$rutaQcc/$paqueteBuscado" | xargs grep -l "ERROR \[" | cut -f 9 -d "/" > $rutaTemporales/logsErrores.log;
logsErrores=$(cat $rutaTemporales/logsErrores.log);
totalLogsErrores=`cat $rutaTemporales/logsErrores.log | wc -l`;
for (( j=1; j<=$totalLanzadosPendientes; j++ ))
do
equipoBusqueda=`echo $lanzadosPendientes | cut -f $j -d " "`;
for (( k=1; k<=$totalLogsErrores; k++ ))
do
logBusqueda=`echo $logsErrores | cut -f $k -d " "`;
grep "ERROR \[$equipoBusqueda\]" $rutaTrazas/$logBusqueda >> $rutaTemporales/erroresPendientes.log;
if [ $? -eq 0 ];then
break;
fi;
done;
done;
cat $rutaTemporales/erroresPendientes.log | sed 's/ / /g' | sed '/No se ha podido/d' | cut -f 7-14 -d " " | sort -u > $rutaTemporales/erroresPendientes_Final.log;
}
问题在于大于 20k 的 $totalLogsErrores ...
我可以通过其他方式做到这一点吗?
谢谢!
----------------------- 编辑 1 -----------
$ time find $rutaTrazas -name "instala_sw_qcc_2012*" | xargs grep -l "$rutaQcc/$paqueteBuscado" | xargs grep -l "ERROR [" | cut -f 9 -d "/"
real 0m3.862s
user 0m0.959s
sys 0m2.941s
$ du -h ../trazas/instala_sw_qcc_20120718091838.log
4.0K ../trazas/instala_sw_qcc_20120718091838.log
$ time grep error ../trazas/instala_sw_qcc_20120718091838.log
real 0m0.001s
user 0m0.001s
sys 0m0.000s