The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
.
google unix.com




View Single Post in the UNIX and Linux Forums - Click on the Thread or Permalink to View Entire Thread -->
  #3 (permalink)  
Old 07-03-2009
kshji's Avatar
kshji kshji is offline
Registered User
  
 

Join Date: Jun 2009
Location: Finland
Posts: 236
Done using without external programs like awk.
1st version is generic, remove extra data from lines.

Code:
#!/usr/bin/ksh
while read id restline
do
        case "$restline" in
                "") # only id, so print line
                    print "$prevheader $id"
                    ;;
                *)  # long line, remove constant/extra strings
                    str=${restline/are the/}
                    str=${str/running in the server/}
                    str=${str/[Dd]omains/}
                    # what we have ? Values
                    prevheader=$str
                    ;;
        esac
done < input.txt

And then to solution for this case. Need to change field order

Code:
print "____________________________________________________"
# change fld order
while read id restline
do
        case "$restline" in
                "") print "$prevheader $id" ;;
                *)  str=${restline/are the/}
                    str=${str/running in the server/}
                    str=${str/[Dd]omains/}
                    # fields to array flds
                    set -A flds -- $str
                    lastfld=${#flds[*]}
                    # first id = 0
                    ((lastfld-=1))
                    # last field value
                    prevheader=${flds[$lastfld]}
                    ((lastfld-=1))
                    # rest fields
                    fld=0
                    while ((fld<=lastfld))
                    do
                          prevheader="$prevheader ${flds[$fld]}"
                          ((fld+=1))
                    done
                    ;;
        esac
done < input.txt