← Back to team overview

sslug-teknik team mailing list archive

Re: Storke langsomt bash script

 


Peter Makholm skrev:
Martin Dupont Ahrentsen <martin@xxxxxxxxxxxx> writes:

Jeg har et script som skal parse en en fil hvor den skal tjekke om
nogle numre på nogle felter ligger indenfor nogle globale serier.

Du er et godt stykke på den anden side af hvor jeg ville vælge et
andet sprog end shell scripts.
Hvilke sprog ville du foreslå i stedet?
----------------start cut af script----------------

startno1=92080000001
endno1=92081327500

startno2=92085000001
endno2=92085135000

startno3=92085135000
endno3=92085973000

cd ${masterdatadir}

for i in `cat t_pcl_ser`
do
       testcustomerid=`echo $i | cut -d\| -f1`
       teststartno=`echo $i | cut -d\| -f2`
       testendno=`echo $i | cut -d\| -f3`
       testactiveflag=`echo $i | cut -d\| -f4`
       testprocflag001=`echo $i | cut -d\| -f5`
       testprocflag002=`echo $i | cut -d\| -f6`
       testprocflag003=`echo $i | cut -d\| -f7`
       testprocflag004=`echo $i | cut -d\| -f8`
       testcountrya2=`echo $i | cut -d\| -f9`
       testzip=`echo $i | cut -d\| -f10`
       testprocflag005=`echo $i | cut -d\| -f11`

En del af dit problem er at du starter 33 processer bare for at parse
en enkelt linje. Med bash kan du stoppe linjen i et array med lidt
smart brug af IFS.

        OLD_IFS=$IFS
        IFS="|"

        line=($i)
IFS=$OLD_IFS

        testcustomerid=${line[0]}
        teststartno=${line[1]}
        testendno=${line[2]}
        testactiveflag=${line[3]}
        testprocflag001=${line[4]}
        testprocflag002=${line[5]}
        testprocflag003=${line[6]}
        testprocflag004=${line[7]}
        testcountrya2=${line[8]}
        testzip=${line[9]}
        testprocflag005=${line[10]}

       if [ \( ${teststartno} -ge ${startno1} -a ${testendno} -le
${endno1} \) -o \( ${teststartno} -ge ${startno2} -a ${testendno} -le
${endno2} \) -o \( ${teststartno} -ge ${startno3} -a ${testendno} -le
${endno3} \) ]
       then
               echo
"${testcustomerid}|${teststartno}|${testendno}|${testactiveflag}|${testprocflag001}|Y|Y|${testprocflag004}|${testcountrya2}|${testzip}|${testprocflag005}|"
${masterdatadir}/tmp/t_pcl_ser
       else
               echo  ${i} >> ${masterdatadir}/tmp/t_pcl_ser
       fi
done

----------------end cut af script----------------

//Makholm


Det virker til at kører noget hurtigere men det tager stadig lang tid. Det vil stadig tage omkring 1 time at parse. Nu er problemet at jeg ikke er en haj til perl, men hvordan ville et tilsvarende perl script håndtere disse mængder?

Med venlig hilsen

Martin Ahrentsen




Follow ups

References