Foreach loop with two variables


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Foreach loop with two variables
# 1  
Old 07-27-2015
Foreach loop with two variables

I need to put together a script that will take the contents of two different files (database name and database owner) and put them in two variables within a line:

Code:
 foreach x (`cat /local/hd3/dba/tools/build_db_scripts/dbs`)
foreach z (`cat /local/hd3/dba/tools/build_db_scripts/dbas`)
echo "sql $x -u$z <script.sql>> script.log" >> /local/hd3/dba/tools/build_db_scripts/run_this
end
chmod 777 /local/hd3/dba/tools/build_db_scripts/run_this

Running the above only gives me the first database name on every line with the owner for all of the other databases as the second parameter. I need a line for each database name/dba combination.

Thank you !
# 2  
Old 07-27-2015
For starters: You appear to missing the last end statement

Code:
foreach ()
   foreach ()

   end
end


Last edited by Scrutinizer; 07-27-2015 at 06:19 PM..
# 3  
Old 07-27-2015
I tried that but it simply iterated the same thing for each database name as it did for just the first name.
# 4  
Old 07-27-2015
does it have to be csh/tcsh?
Code:
#!/bin/ksh
awk '
   FNR==NR {f1[$0];next} 
  {f2[$0]}
END {
   for (f1I in f1)
     for (f2I in f2)
       print "sql " f1I " -u" f2I " <script.sql>> script.log"
}' /local/hd3/dba/tools/build_db_scripts/dbs /local/hd3/dba/tools/build_db_scripts/dbas > /local/hd3/dba/tools/build_db_scripts/run_this

chmod 777 /local/hd3/dba/tools/build_db_scripts/run_this

This User Gave Thanks to vgersh99 For This Post:
# 5  
Old 07-28-2015
I guess you want to read from the two files simultaneously?
With /bin/sh (bash, ksh, zsh, ash, dash, ...)
Code:
#!/bin/sh
while read x && read z <&3
do
   echo "sql $x -u$z"
done < /local/hd3/dba/tools/build_db_scripts/dbs 3< /local/hd3/dba/tools/build_db_scripts/dbas

csh/tcsh cannot do that (need an external tool and would remain clumsy).
For example, with the paste command
Code:
#!/bin/csh
set f=0
foreach i ( `paste /local/hd3/dba/tools/build_db_scripts/dbs /local/hd3/dba/tools/build_db_scripts/dbas` )
  if ( "$f" == 0 ) then
    set x=$i
  else
    echo "sql $x -u$i"
  endif
  @ f = 1 - $f
end

But it does not really know which value comes from which file. If a line contains a space it will mix up.

Last edited by MadeInGermany; 07-28-2015 at 07:48 AM.. Reason: (bad) example with csh
This User Gave Thanks to MadeInGermany For This Post:
# 6  
Old 07-28-2015
I think the OP wanted all the permutations between file1 and file2....
# 7  
Old 07-28-2015
I used the sh code offered by MadeInGermany and it is working perfectly.

Many thanks!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

foreach loop in csh

Hi everyone I'm new to unix and encountered a small problem i couldnt find out a reason why it doesn't work..please help.. in my csh script when i tried to use the foreach loop like this: foreach x ( ls ) echo $x end when i tried to run it, it printed out 'ls' to the std out instead of... (3 Replies)
Discussion started by: ymc1g11
3 Replies

2. Shell Programming and Scripting

foreach loop problem

Dear all, I wrote a script to download files and move files in directories according to their name. Now here is the problem: Both p101 and p360 data download successfully, but when I move them according to the year and month, only p101 data can be placed at the right location, p360,... (1 Reply)
Discussion started by: handsonzhao
1 Replies

3. UNIX for Dummies Questions & Answers

Using the Foreach loop, Needing help

I am trying to make a script for my Counter-Strike: Source servers. What i am wanting it to do is for it to restart each server, the only way i can think of doing this in through for each. Years what i have at the moment. server_start() { START=`ps x | grep SCREEN | grep $SRV | cut -d '?' -f... (5 Replies)
Discussion started by: grahamn95
5 Replies

4. Shell Programming and Scripting

Using sed with a foreach loop

So I am back again beating my head against the wall with a shell script and getting a headache! I want to change each year in a file (1980, 1981, 1982, 1983, etc.) to the same year followed by a tab. The input is "blah blah (1980) blah blah". I want to get "blah blah (1980 ) blah blah".... (2 Replies)
Discussion started by: Peggy White
2 Replies

5. UNIX for Advanced & Expert Users

Problem with foreach loop

Hi All, Is there any problem with the below 'foreach' loop? foreach risk_factor ($(cat "$rf_list")) where "rf_list=$SCRIPT/Utility/rflist.txt " I'm wondering, it is throwing below error message: syntax error at line 34: `(' unexpected Any idea/suggestions ? Thanks in advance /... (7 Replies)
Discussion started by: ganapati
7 Replies

6. Shell Programming and Scripting

foreach loop

Hi everyone Does anyone know what is wrong with this script. i keep getting errors foreach filename (`cat testing1`) set string=$filename set depth=`echo "$string" echo $depth end the error is the following testing: line 1: syntax error near unexpected token `(' testing: line 1:... (3 Replies)
Discussion started by: ROOZ
3 Replies

7. Shell Programming and Scripting

foreach loop + 2 variables

In a foreach loop, is it possible for the loop to go through 2 arguments instead of one i.e. instead of foreach i (do stuff for i), we have foreach i j(do stuff for i; do stuff for j) I am working under BASH and TCSH shell environments cheers (3 Replies)
Discussion started by: JamesGoh
3 Replies

8. Shell Programming and Scripting

foreach loop

Hi Guys, I have a loop which uses a wildcard i.e. foreach f (*) but when I execute the tcsh file in unix then it gives me an error ->>>>>>>foreach: words not parenthesized<<<<<<<<<<- Any help. (1 Reply)
Discussion started by: abch624
1 Replies

9. Shell Programming and Scripting

Foreach loop

What am I doing wrong with this foreach loop? foreach var ($argv) @sum = $sum + $var (4 Replies)
Discussion started by: haze21
4 Replies

10. UNIX for Dummies Questions & Answers

foreach loop question

Hello, I am new at this forum so please bare with me on this. Within a given directory, I have a list of files in which in each file, I would like to do a substitution. I would like to substitute the string mlcl to mll in each file using the foreach command. I dont quite get how to do that. If... (7 Replies)
Discussion started by: clipski
7 Replies
Login or Register to Ask a Question