|
|||||||
| Forums | Search Forums | Register | Forum Rules | Man Pages | Albums | FAQ | Members | Calendar | Search | Today's Posts | Mark Forums Read |
| UNIX for Dummies Questions & Answers If you're not sure where to post a UNIX or Linux question, post it here. All UNIX and Linux newbies welcome !! |
|
|
|
Thread Tools | Search this Thread | Display Modes |
|
#1
|
|||
|
|||
|
Do While Script
All, I am a newbie to scripting and would appreciate any assistance on the following. I am a NetBackup administrator and just completed a disaster recovery exercise. Thankfully this was only six clients to recover. While working on the exercise I decided to try and script everything and found a way to get what I needed but some parts I am certain could be scripted more efficiently. What I am doing in this example is to obtain all of the available backups between the date range specified from each client one at a time. Is there a way to pass along two ( or more ) variables to a single line for all of the clients instead of running the command for each client individually? I want to take this and shrink it down to a single line that somehow reads a file of the clients that I created call /tmp/clients.lst and it would loop thru the file to find the client name and the dates for each one and continue until it loops through for each clients and its dates. Code:
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 123 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 456 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 789 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 123 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 456 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 789 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmpHere is how I got it to work running each client by itself... Code:
=> vi /tmp/alldates Code:
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 123 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 456 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 789 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 123 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 456 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 789 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmpCode:
=> chmod 777 /tmp/alldates => /tmp/alldates => cat /tmp/dates.tmp | sort -u > /tmp/dates.lst => cat /tmp/dates.lst 02/10/2013 02/11/2013 02/12/2013 02/13/2013 Thank you... Last edited by Scrutinizer; 03-14-2013 at 02:39 PM.. Reason: code tags |
| Sponsored Links | ||
|
|
#2
|
|||
|
|||
|
It seems like you want the dates and some users from the file. Process the whole file to make a list of users and dates, sorted. Take your list of user to restore and sort it. Use join on the two files to produce a list of matches.
|
| Sponsored Links | ||
|
|
#3
|
|||
|
|||
|
I'm not sure I understand half of your request. I see the client change from line to line, but I don't see any date change. (Besides, you can join the
awk and
sed commands into one single command)
Why don't you use for client in 123 456 789 etc to loop through the clients? |
|
#4
|
|||
|
|||
|
Let me start over...
This script will perform the following: for IMAGE in `cat /tmp/dates.lst` do sudo bpimagelist -L -client server1 -d $IMAGE -e $IMAGE -policy INT-UNIX-Servers | egrep -i 'Backup ID:'| awk '!x[$0]++' done | awk '{print$3}' >> /tmp/intershopimages 1) Uses /tmp/dates ( file with a single column of dates ) using IMAGE as the variable for the date range 2) Uses a set of specific client ( server1 ) 3) To find all available backups ( that can be used to restore from ) 4) Passes the output to /tmp/intershopimages 5) Problem is I have 65+ clients to run this command for ( I just change Server1 to Server2, etc... and run it 65 times yuck! ) 6) Is there a way I can add a second variable ( IMAGE2 ) and assign that to another file that contains the clients ( /tmp/clients )? I am looking for it to Loop1: Finds first client Finds first date Finds all available backups for the first client only Loop2: Finds first client Finds second date Finds all available backups for the first client only It would eventually loop through for the first client for every date then goto the next client found in the list Loop3: Finds second client Finds first date Finds all available backups for the second client only Loop4: Finds second client Finds second date Finds all available backups for the second client only etc... until every clients backups were found. Thank you |
| Sponsored Links | |
|
|
#5
|
|||
|
|||
|
untested: Code:
while read CLIENT
do while read IMAGE
do ... your process ...
done < /tmp/dates.lst
done < /tmp/clients.lst |
| Sponsored Links | |
|
|
#6
|
|||
|
|||
|
I suppose GNU parallel might be nice for this, if it runs long. Or, you could spin off each client in the background. If there are many clients, parallel can control the number at once.
|
| Sponsored Links | |
|
|
#7
|
|||
|
|||
|
Code:
sudo parallel /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client {1} -d {2} -e 03/04/2013 :::: clients.file dates.file | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp |
| Sponsored Links | ||
|
![]() |
| Thread Tools | Search this Thread |
| Display Modes | |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| create a shell script that calls another script and and an awk script | magikminox | Shell Programming and Scripting | 0 | 06-26-2008 02:50 AM |
|
|