Bash script questions for gurus

guys,

I need a steer in the right direction for this issue. it would be great if anyone of you can help me out.

i have a textfile where i want to swap the lines based on the user input.

The textfile is looks like the

#file 1 name
TB
#file 1 ID
1000
#
#file for ID1 system1
AB_12_TB_3000
#
#file for ID1 system2
BC_12_TB_3000
#file 2 name
CO
#file 2 ID
5000
#
#file for ID2 system1
AB_12_CO_3000
#
#file for ID2 system2
BC_12_CO_3000

if the user enters CO then i want CO,5000 and the files should be file 1 and the TB should be file 2. basically interchanging it and making the user entry to be on top and putting the top one to be on the placeholder of file2.here i have mentioned only 2 files, but i am dealing with more than 2 in my files.

The code i have written so far is like this. it works except the ID part.

THE FILENAME IS ROCK.IN i.e that why u see rock.in at the end.

MY QUESTION WOULD BE

1)IS THERE A MORE ROBUST AND EASIER WAY TO DO THIS.

2)MY LAST SED STATEMENT IS NOT CHANGING IT PROPERLY

#!/bin/bash


user_rock=$(grep -hi 'tb' rock.in)

val=$(grep -A 3 -m 1 -hi 'tb' rock.in)



rock1=$(sed -n -e '/file 1/ {n;p;}' rock.in)


D1=`echo $rock1 | cut -d ' ' -f3`
r_name=`echo $D1| cut -d '_' -f3`

D2=`echo $rock1 | cut -d ' ' -f2`

D3=`echo $val | cut -d ' ' -f5`
D6=`echo $val | cut -d ' ' -f3`

D4=`echo $user_rock | cut -d ' ' -f3`
u_name=`echo $D4| cut -d '_' -f3`

sed -i "s/$u_name/ch/gi" rock.in

sed -i "s/$r_name/$u_name/gi" rock.in

sed -i "s/ch/$r_name/gi" rock.in

sed -i "/file 1 ID/,/{n;p;}/s/$D2/$D3/g" rock.in

sed -i "/file $D6 ID/,/{n;p;}/s/$D3/$D2/g" rock.in


#echo $D3 $D2

exit 0

I WOULD APPRECIATE ANY IDEAS OR SUGGESTIONS. THANKS AGAIN

I, am probably others, are confused by your request.
Please supply a sample of the desired output file at the end of your changes.

sorry about that, let me post the desired output..
#file 1 name
CO
#file 1 ID
5000
#
#file for ID1 system1
AB_12_CO_3000
#
#file for ID1 system2
BC_12_CO_3000
#file 2 name
TB
#file 2 ID
1000
#
#file for ID2 system1
AB_12_TB_3000
#
#file for ID2 system2
BC_12_TB_3000

once the user input is CO, i move the CO and its desired files to the file1 and the old values of file 1 to where the CO was.

hope this is clear if not i can explain it again.

Thanks joey.

---------- Post updated at 07:06 AM ---------- Previous update was at 06:48 AM ----------

please do let me know if in anyway it isn't clear. I will explain it with further examples. I just don't want to miss out any suggestionsor ides because of my lack of not writing it lucid.

Perhaps what you are trying to do with your current coding?
It appears that the data records are all ten lines, maybe process ten lines at a time?

This is not in 'good clean' code, but more to start thinking...

cp xfile wkfile1
cnt=1

head -10 wkfile1 >wkfile2 #to separate only 10 lines
while [ -s wkfile2 ] #only process if data in file
do
# now, store each rec into array values
file[cnt]='head -2 wkfile2 | tail -1' #the 2nd line
fileid[cnt]='head -4 wkfile2 | tail -1' #the 4th line
etc...
cnt=cnt+1
tail +11 wkfile1 >wkfile1a #skip over first ten lines
mv wkfile1a wkfile1
done

#now you can figure out the select variable, and how to switch values?