Is there a better way I could have run this loop. (For loop with two variables)


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Is there a better way I could have run this loop. (For loop with two variables)
# 1  
Old 03-27-2009
Is there a better way I could have run this loop. (For loop with two variables)

Sorry for such a dreadful title, but I'm not sure how to be more descriptive. I'm hoping some of the more gurutastic out there can take a look at a solution I came up with to a problem, and advice if there are better ways to have gone about it.

To make a long story short around 20K pieces of equipment de-registered, and the only way to re-register them relies on using a manual script that needs the equipments MAC address and IP address. Unfortunately there is no current way to run the script against a file with the information. So I decided that a loop would be the best way to go about it.

What I wound up doing was creating a pipe delimited file with the equipment info, and running the following against it:

Code:
[mystro@mys-nycnm-srv01 scripts]$ head -5 IP
00:0F:21:FE:29:67|10.130.192.173
00:0F:21:FE:2D:57|10.140.66.207
00:0F:21:FE:2E:21|10.153.200.37
00:0F:21:FE:2E:88|10.141.146.134
00:0F:21:FE:2E:CA|10.157.206.8

[mystro@mys-nycnm-srv01 scripts]$ for i in `cat IP`;do mac=$(echo "$i"|cut -f1 -d\|);ip=$(echo "$i"|cut -f2 -d\|);/usr/local/mystro/scripts/mdiags cid reg $mac $ip;done

It worked perfectly, but as I'm (obviously) not the most skilled scripter I always like to hear critiques from more experienced people.

IE: Should I have not used echo...is there an easier way to isolate the info than cut...etc.
# 2  
Old 03-27-2009
Here's another way, using only shell
Code:
while read line; do
     /usr/local/mystro/scripts/mdiags cid reg ${line%|*} ${line#*|}
done < IP

${line%|*} extracts the MAC address
${line#*|} extracts the IP address
# 3  
Old 03-27-2009
I think if we have to do 20k loops, better use nawk:

Code:
nawk -F"|" '{system("/usr/local/mystro/scripts/mdiags cid reg "$1" "$2)}' IP

Or

Code:
tr "|" " " < IP |xargs -I {} /usr/local/mystro/scripts/mdiags cid reg {}

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help with variables in loop

Hello, please assist: users="test1 test2" keytest1="abcd" keytest2="dbcd" for i in $users do echo "$key${i}" > fileout done So, my objective is to take the current user (ie test1) in loop and echo its associated keyname (ie keytest1) variable to a file. The echo... (2 Replies)
Discussion started by: motdman
2 Replies

2. Shell Programming and Scripting

Loop through variables

I am pretty new to Unix. Trying to pick up some slack while a coworker is out on vacation. Basically the script is working fine however when I go through the testing phase and have to make mods it is a pita. Here is an example of what I have #!/bin/ksh if then echo... (8 Replies)
Discussion started by: biobill
8 Replies

3. Shell Programming and Scripting

Need to loop three variables

Hi, I have a out from a command i need to grep a report. For that i need loop 3 variable for that. How i can loop need help. Symmetrix ID : 123456 Masking View Name : Host16 Last updated at : 04:13:06 PM on Thu Mar 17,2011 Initiator Group Name : Host16 Host... (3 Replies)
Discussion started by: ranjancom2000
3 Replies

4. Shell Programming and Scripting

for loop with 2 variables

i am having a file contants as below my requirement is for file in `awk -F "," '{print $8,$9}'` <temp.txt echo "$file" echo "$file">test.txt a=`awk -F "," '{print $1}' `<test.txt b=`awk -F "," '{print $2}' `<test.txt but script reads , i want both the vales for further... (5 Replies)
Discussion started by: sagar_1986
5 Replies

5. Shell Programming and Scripting

Help with a For loop and variables

Greetings. I'm completely new to shell scripting and quickly trying to catch on. Here's my scenario: I have a text file, named ip.txt, containing IP addresses. I want to automatically perform a whois query on each address in the file, search the output for the country, and then put both the IP... (4 Replies)
Discussion started by: molnir
4 Replies

6. Shell Programming and Scripting

Need help in for loop with 2 variables

Hi, I need help on for loop need to add domain and IP In domain list 1.com 2.com 3.com In Ip list 1.1.0.1 1.2.0.1 1.3.0.1 1.com 1.1.0.1 2.com 1.2.0.1 3.com 1.3.0.1 I need to excute this command (4 Replies)
Discussion started by: ranjancom2000
4 Replies

7. Shell Programming and Scripting

Two variables in a for loop

Can we assign two variables in a for loop? I have an input file: 000301|20100502 835101|20100502 I want to read this file in a for loop and assign values to two different variables. I did this now but did not work for STORE,RUNDATE in `awk -F\| '{print $1,$2}' inputfile ... (4 Replies)
Discussion started by: gpaulose
4 Replies

8. Shell Programming and Scripting

SH: two variables in for loop

Hi, say I have a simple sh script like this: for i in a b c d do for j in 1 2 3 4 do echo "$i $j" done done and the output is a 1 a 2 a 3 a 4 b 1 (20 Replies)
Discussion started by: marcpascual
20 Replies

9. Shell Programming and Scripting

Using variables created sequentially in a loop while still inside of the loop [bash]

I'm trying to understand if it's possible to create a set of variables that are numbered based on another variable (using eval) in a loop, and then call on it before the loop ends. As an example I've written a script called question (The fist command is to show what is the contents of the... (2 Replies)
Discussion started by: DeCoTwc
2 Replies

10. Shell Programming and Scripting

using variables outside a while loop

Hi Guys, I have a scripts that uses a while loop to read a file and set 2 variables. How can I do this so the variables can be used outside the while loop ? Below is an example....# ./junk2 -m -e user EXE=user master=TRUE DB_TAG=PRODUCT In loop MST=MST=testsvr1:3110 In loop ARGS=... (2 Replies)
Discussion started by: Tornado
2 Replies
Login or Register to Ask a Question