x2sh - booster script: correction, please USE THIS!

George Boudreau georgeb at linuxfromscratch.org
Sun Feb 19 12:12:19 PST 2006


George M,
   How about a 64% speed improvement (1.8s for lfs-dev book ..see below).
   Is inline/in-script parsing next??

George B.


#----------------- cut -------------
#!/bin/bash

# script: XML pseudoparsing booster

declare -a filearray
declare -a filestore
declare -i linecounter
declare -i collectSTART=0
declare -i collectSTOP=0

declare -a chapterlist=(chapter05 \
                         chapter06 \
                         chapter07 \
                         chapter09);

for selectchapter in ${chapterlist[@]}
do
   cd $selectchapter
   echo $selectchapter
   for filenameinput in *.xml
   do
     echo "-------------------------------------------------"
     echo "x2sh:parsing file: "$filenameinput
     echo "-------------------------------------------------"
     while read filearray[linecounter]; do
       ((linecounter++))
     done < "$filenameinput"

# Test for the following scenarios
# 1. <userinput> ... </userinput> inline definition
# 2. <userinput> spans in more lines
# 3. </userinput> ends spanning
#
     for ((linecounter=0; linecounter < ${#filearray[@]}; linecounter++));
     do
       case ${filearray[linecounter]} in
         *\<userinput\>*)
             if [[ "${filearray[linecounter]}" =~ '</userinput>' ]]; 
then #scenario 1
                printf "%s\n" "${filearray[linecounter]}"
             elif [[ ! "${filearray[linecounter]}" =~ '</userinput>' ]]; 
then #scenario 2
                printf "%s\n" "${filearray[linecounter]}"
                ((collectSTART= linecounter + 1))
             fi
	  ;;

          *\</userinput\>*) #  scenario 3
             ((collectSTOP=linecounter++))
             if [ $((collectSTOP - collectSTART)) -ge 1 ] ; then
               for ((addthis=$collectSTART; addthis < $collectSTOP; 
addthis++)); do
                 printf "%s\n" "${filearray[addthis]}"
               done
	    fi
             printf "%s\n" "${filearray[linecounter]}"
             ((collectSTOP=0))
             ((collectSTART=0))	
	  ;;
       esac
     done  # for ((linecounter=0; linecounter.....

     filearray=();
     linecounter=0

   done  # for filenameinput in *.xml
   cd ..

done  # for selectchapter in ${chapterlist

#--------------- end cut ----------------



More information about the alfs-discuss mailing list