First time poster so be gentle - Also apologies if this is in the wrong section.
I am not a unix administrator but as a Storage administrator know enouh to get me by for what I need to do.
However I am having a slow night-shift so I am playing about with a bit of scripting to make getting information of an EMC array a little easier.
I have this command:
symcfg -sid 1474 -fa all list
which gives this output:
Symmetrix ID: 000284701474
S Y M M E T R I X F I B R E D I R E C T O R S
Dir Port WWN VCM Volume Set Pnt to Pnt
Enabled Addressing
FA-3A 0 500604843e0cc882 No No Yes
FA-3A 1 500604843e0cc8a2 Yes Yes Yes
FA-4A 0 500604843e0cc883 Yes No Yes
FA-4A 1 500604843e0cc8a3 Yes Yes Yes
FA-6A 0 500604843e0cc885 No No Yes
FA-6A 1 500604843e0cc8a5 Yes No Yes
FA-11A 0 500604843e0cc88a Yes No Yes
FA-11A 1 500604843e0cc8aa Yes Yes Yes
FA-13A 0 500604843e0cc88c No No Yes
FA-13A 1 500604843e0cc8ac Yes No Yes
FA-14A 0 500604843e0cc88d Yes No Yes
FA-14A 1 500604843e0cc8ad Yes No Yes
FA-3B 0 500604843e0cc892 Yes No Yes
FA-3B 1 500604843e0cc8b2 Yes No Yes
FA-4B 0 500604843e0cc893 No No Yes
FA-4B 1 500604843e0cc8b3 Yes No Yes
FA-6B 0 500604843e0cc895 Yes No Yes
FA-6B 1 500604843e0cc8b5 Yes Yes Yes
FA-11B 0 500604843e0cc89a No No Yes
FA-11B 1 500604843e0cc8ba Yes No Yes
FA-13B 0 500604843e0cc89c Yes No Yes
FA-13B 1 500604843e0cc8bc Yes Yes Yes
FA-14B 0 500604843e0cc89d No No Yes
FA-14B 1 500604843e0cc8bd Yes Yes Yes
What I want to do is pass column 1 & 2 into another command for different output.
The twist is I in column 1 I need to get rid of the "FA-" bit.
I have tried something like:
symcfg -sid 1474 -fa all list | awk '{print $1, $2}' | grep -v 'FA-'
However this removes the whole FA- and the number and letter afterwards.
The plan is to eventually do something like:
for i in `symcfg -sid 1474 -fa all list | awk '{print $1}' | grep -v 'FA-'`
for n in `symcfg -sid 1474 -fa all list | awk '{print $2}'`
do
echo "symmaskdb -sid 1474 -dir $i -p $n list database -nop"
symmaskdb -sid 1474 -dir $i -p $n list database -nop >> 1474_list_database
done
I also sure I am going to get problems with the above command as well but first things first.
---------- Post updated at 22:32 ---------- Previous update was at 22:27 ----------
I think it may be easier to just use shell, like so for instance:
symcfg -sid 1474 -fa all list | {
read;read;read;read # cut out the first 4 lines of the output
while IFS='[ \t-]' read x director port x; do
echo "symmaskdb -sid 1474 -dir $director -p $port list database -nop"
done
}
Scrutinizer,
Thanks for the response dude however like I said I am no administrator so can guess at what these commands do but that is about it. unfortuantely neither are working for me.
This returns about the same amount of lines as I would expect from my output however all the lines are blank. What does the [\t-]* actually do? I have tried searching the man pages but cannot see this.
---------- Post updated at 22:32 ---------- Previous update was at 22:27 ----------
This returns an error message "read: missing argument" I assumed the read like your comments like you said were just to not read the first few lines (which is useful to know by the way).
Apologies for being a bit dense. Its at times like these I realise how little I know about UNIX and scripting.
read x;read x;read x;read x # cut out the first 4 lines of the output
What is you OS?
About awk:
-F'[ \t-]* changes the field separator to any space, tab or - character and makes awk consider repetions of the characters as a single separator
opsan00@dyeccs01 # symcfg -sid 1474 -fa all list | {
opsan00@dyeccs01 > read x;read x;read x;read x
opsan00@dyeccs01 > while IFS='[ \t-]' read x director port x; do
opsan00@dyeccs01 > echo "symmaskdb -sid 1474 -dir $director -p $port list database -nop"
opsan00@dyeccs01 > done
opsan00@dyeccs01 > }
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
#
#
I think I the curcial bit of the script is the bit I least understand:
while IFS='[ \t-]' read x director port x
I assume that the director and port are parameters and hence why they are passed into the echo command - correct?
However how does it know what these parameters are without awk column 1 & 2?
I am probably getting this wrong but I think if I can get my head round this then I will be able to understand what the script is doing and may even be able to troubleshoot it better myself
I also thought I understood your awk parameters and tried to change it slightly which made it output the whole command - I will need to see if there is a way I can figure out how to do this - the more I use awk the more l like it.
# symcfg -sid 1474 -fa all list | awk -F'[ \tFA-]*' '{print $1}'
Symmetrix ID: 000284701474
S Y M M E T R I X F I B R E D I R E C T O R S
Dir Port WWN VCM Volume Set Pnt to Pnt
Enabled Addressing
FA-3A 0 500604843e0cc882 No No Yes
FA-3A 1 500604843e0cc8a2 Yes Yes Yes
FA-4A 0 500604843e0cc883 Yes No Yes
FA-4A 1 500604843e0cc8a3 Yes Yes Yes
FA-6A 0 500604843e0cc885 No No Yes
FA-6A 1 500604843e0cc8a5 Yes No Yes
FA-11A 0 500604843e0cc88a Yes No Yes
FA-11A 1 500604843e0cc8aa Yes Yes Yes
FA-13A 0 500604843e0cc88c No No Yes
FA-13A 1 500604843e0cc8ac Yes No Yes
FA-14A 0 500604843e0cc88d Yes No Yes
FA-14A 1 500604843e0cc8ad Yes No Yes
FA-3B 0 500604843e0cc892 Yes No Yes
FA-3B 1 500604843e0cc8b2 Yes No Yes
FA-4B 0 500604843e0cc893 No No Yes
FA-4B 1 500604843e0cc8b3 Yes No Yes
FA-6B 0 500604843e0cc895 Yes No Yes
FA-6B 1 500604843e0cc8b5 Yes Yes Yes
FA-11B 0 500604843e0cc89a No No Yes
FA-11B 1 500604843e0cc8ba Yes No Yes
FA-13B 0 500604843e0cc89c Yes No Yes
FA-13B 1 500604843e0cc8bc Yes Yes Yes
FA-14B 0 500604843e0cc89d No No Yes
FA-14B 1 500604843e0cc8bd Yes Yes Yes
#
# uname -a
SunOS 5.8 Generic_117000-05 sun4u sparc SUNW,Sun-Fire-V240
#
This command worked better this time and is passing the right parameters into command which is great - however it is not quite working when I use it properly:
# symcfg -sid 1474 -fa all list | {
> read x;read x;read x;read x
> while IFS="-$IFS" read x director port x; do
> echo "symmaskdb -sid 1474 -dir $director -p $port list database -nop"
> done
> }
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir Port -p WWN list database -nop
symmaskdb -sid 1474 -dir Addressing -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir 3A -p 0 list database -nop
symmaskdb -sid 1474 -dir 3A -p 1 list database -nop
symmaskdb -sid 1474 -dir 4A -p 0 list database -nop
symmaskdb -sid 1474 -dir 4A -p 1 list database -nop
symmaskdb -sid 1474 -dir 6A -p 0 list database -nop
symmaskdb -sid 1474 -dir 6A -p 1 list database -nop
symmaskdb -sid 1474 -dir 11A -p 0 list database -nop
symmaskdb -sid 1474 -dir 11A -p 1 list database -nop
symmaskdb -sid 1474 -dir 13A -p 0 list database -nop
symmaskdb -sid 1474 -dir 13A -p 1 list database -nop
symmaskdb -sid 1474 -dir 14A -p 0 list database -nop
symmaskdb -sid 1474 -dir 14A -p 1 list database -nop
symmaskdb -sid 1474 -dir 3B -p 0 list database -nop
symmaskdb -sid 1474 -dir 3B -p 1 list database -nop
symmaskdb -sid 1474 -dir 4B -p 0 list database -nop
symmaskdb -sid 1474 -dir 4B -p 1 list database -nop
symmaskdb -sid 1474 -dir 6B -p 0 list database -nop
symmaskdb -sid 1474 -dir 6B -p 1 list database -nop
symmaskdb -sid 1474 -dir 11B -p 0 list database -nop
symmaskdb -sid 1474 -dir 11B -p 1 list database -nop
symmaskdb -sid 1474 -dir 13B -p 0 list database -nop
symmaskdb -sid 1474 -dir 13B -p 1 list database -nop
symmaskdb -sid 1474 -dir 14B -p 0 list database -nop
symmaskdb -sid 1474 -dir 14B -p 1 list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
#
# symcfg -sid 1474 -fa all list | {
> read x;read x;read x;read x
> while IFS="-$IFS" read x director port x; do
> echo "symmaskdb -sid 1474 -dir $director -p $port list database"
> symmaskdb -sid 1474 -dir $director -p $port list database | awk '{print $3}' >>1474_FA_DB_output
> done
> }
symmaskdb -sid 1474 -dir -p list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir Port -p WWN list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir Addressing -p list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir -p list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 3A -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 3A -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 4A -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 4A -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 6A -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 6A -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 11A -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 11A -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 13A -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 13A -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 14A -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 14A -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 3B -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 3B -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 4B -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 4B -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 6B -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 6B -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 11B -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 11B -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 13B -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 13B -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 14B -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 14B -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir -p list database
'sid': Invalid action.
#
However if I issue command on its own it works:
# symmaskdb -sid 1474 -dir 4A -p 1 list database
Symmetrix ID : 000284701474
Database Type : Type2
Last updated at : 04:14:48 AM on Thu Jun 10,2010
Director Identification : FA-4A
Director Port : 1
User-generated
Identifier Type Node Name Port Name Devices
---------------- ----- --------------------------------- ---------
50060b00000abb5e Fibre 50060b00000abb5e 50060b00000abb5e 0386:0387
05A0:0621
50060b00000abf38 Fibre 50060b00000abf38 50060b00000abf38 0388:0389
05A0:0621
50060b00002589e2 Fibre 50060b00002589e2 50060b00002589e2 0380
06AA:06DA
50060b00001d8c36 Fibre 50060b00001d8c36 50060b00001d8c36 0381
06AA:06DA
50060b00002589ec Fibre 50060b00002589ec 50060b00002589ec 039F
06AA:06DA
50060b00000ac882 Fibre 50060b00000ac882 50060b00000ac882 038A:038B
05A0:0621
I cannot tell you how much this is going to help me with many different commands. can you break down the command for me so I can understand how this works - once I understand I can then use for many other different queries and troubleshooting.
As for the other command it did not really return anything - but here is the output:
# symcfg -sid 1474 -fa all list | awk 'NR==5' | od -c
0000000 \n
0000001
#
You are on Solaris 8. You cannot use awk, since it does not work properly. You have to use nawk of /usr/xpg4/bin/awk.
So, could you produce:
symcfg -sid 1474 -fa all list | nawk 'NR==5' | od -c
As for the script. Can you put this in a script file, eg symmask.sh
#!/usr/xpg4/bin/sh
symcfg -sid 1474 -fa all list | {
read;read;read;read # cut out the first 4 lines of the output
while IFS="-$IFS" read x director port x; do
echo "symmaskdb -sid 1474 -dir $director -p $port list database -nop"
symmaskdb -sid 1474 -dir $director -p $port list database -nop
done
}
Then run
chmod +x symmask.sh
to make it executable
en then tun the script:
./symmask.sh
The script works as follows:
Take the output from the command and run it through a pipe it so it becomes input to the code block in the curly braces. Inside the code block, perform 4 reads so that we end up at line 5. Then start a while loop until read can no longer read a line (EOF is reached). Just for the read command, set the IFS to the previous IFS plus the character "-" (this determines how a line is split into fields). Read the first field into dummy variable x (the part before the "-") the second into "director", the third into variable "port" and the rest of the fields into dummy variable x.
Then inside the loop use variables port and director as parameters to the command...