Loop with multiple delimited variables


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Loop with multiple delimited variables
# 8  
Old 03-09-2016
${#A[@]} is array A's element count, ${!A[@]} lists all the indices into array A.

For the quoting of string variables, try

Code:
QUS() { FMT="%s"; [[ $1 =~ [^[:digit:]] ]] && FMT="'%s'"; printf $FMT $1; }
for i in ${!A[@]}; do echo "insert into table ($(QUS ${A[$i]}), $(QUS ${B[$i]}), $(QUS ${C[$i]}));" ; done
insert into table (1, 'a', 0);
insert into table (23, 'ab', 0);
insert into table (234, 'xyz', '1a2b');

# 9  
Old 03-09-2016
Quote:
Originally Posted by rdrtx1
try something like:
Code:
var1=1,23,234
var2=a,ab,xyz
var3=0,0,0

IFS="," arr1=($var1)
IFS="," arr2=($var2)
IFS="," arr3=($var3)

IFS cannot be set local to an array assignment. So you would need to set it globally and use something like:
Code:
oldIFS=$IFS
IFS=,
arr1=($var1) arr2=($var2) arr3=($var3)
IFS=$oldIFS

Quote:
Code:
seq 0 2 | while read i
do
   echo " insert into table (${arr1[$i]}, '${arr2[$i]}', ${arr3[$i]});"
done

Why use an (outdated) external program (seq) and a pipe when we can use shell syntax
Code:
for i in 0 1 2
do

In bash, zsh and ksh93 you can use:
Code:
for i in {0..2}
do

or
Code:
for (( i=0; i<=2; i++))
do


Not important, but perhaps interesting is that there is no need to use a $ sign for a variable reference used as an index to an array:

Code:
echo "insert into table (${arr1[i]}, '${arr2[i]}', ${arr3[i]});"


Last edited by Scrutinizer; 03-09-2016 at 04:33 PM..
# 10  
Old 03-09-2016
thank you all for your valuable inputs. i can incorporate this now:

code

Code:
#!/bin/sh

var1=1,23,234,1
var2=a,ab,xyz,z
var3=0,0,0,1
var4=0,0,0,1


len=`echo $var1 | awk -F '[,]' '{print  NF-1}'`
echo "$len"

oldIFS=$IFS
IFS=,
arr1=($var1) arr2=($var2) arr3=($var3)  arr4=($var4)
IFS=$oldIFS

for (( i=0; i<=3; i++))
do
  echo " insert into table (${arr1[$i]},${arr2[$i]},${arr3[$i]},${arr4[$i]});"
done


Last edited by Scrutinizer; 03-09-2016 at 03:01 PM.. Reason: code tags
# 11  
Old 03-09-2016
You are welcome. To add, instead of
Code:
len=`echo $var1 | awk -F '[,]' '{print  NF-1}'`

one could also use plain shell, without external programs:
Code:
len=${#arr1[@]}

after arr1 is set...

--
=> Please use code tags next time for code and data <=
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Displaying multiple variables in for loop

Hi! I've run into a problem where my variables are displayed in the wrong order. Basically I'm supposed to use a file that has information like this username:firstname:lastname:etc:etc. What I'm interested in doing is reformating it into a something more like this: username lastname,... (2 Replies)
Discussion started by: reindeermountai
2 Replies

2. Shell Programming and Scripting

Multiple variables using awk and for loop for web form submission

Hi My goal is to fill an HTML form and submit. What I have managed to do: 1. curl command to fill up the form and submit 2. a file which has the input curl command: curl -v -b cookie.txt -d __CSRFToken__=dc23d5da47953b3b390ec68d972af10380908b14 -d do=create -d a=open -d... (10 Replies)
Discussion started by: zorrox
10 Replies

3. UNIX for Dummies Questions & Answers

Reading multiple variables in a loop

Hi, I managed to read and print variable as shown in the below code. table_name=table1,table2,table3 i=0 IFS="," for i in $table_name do echo $i done Is there a way how I can read more than one variable. For example I need to read 2 variables and populate the output... (6 Replies)
Discussion started by: shash
6 Replies

4. UNIX for Dummies Questions & Answers

Multiple variables to be passed in a loop

Hi, I need to pass the multiple values of src1 to another variable. I managed to print it but not sure how to assign it to a variable in a loop. src1=01,02,03 echo $src1|awk 'BEGIN {FS=","} {for(i=1;i<=NF;i++) print $i}' I need to pass the value as src2=01 src2=02 src2=03 Thanks... (4 Replies)
Discussion started by: shash
4 Replies

5. Shell Programming and Scripting

How to use for/while loop with multiple variables?

Hi, I have two variables like below which will always be of the same size a=1:2:3 b=A:B:C I need to use a for/while loop that will have both the variables available. I cannot use an array here and will probably might iterate through the variable as echo $a | tr ':' '\n' and thus iterate... (5 Replies)
Discussion started by: Elizabeth H
5 Replies

6. UNIX for Dummies Questions & Answers

For Loop for a list of tab delimited variables

Hello, I need to run a command for a set of input variables that are present in a tab delimited file, a sample of which is shown below: 1 3749 1 4129 1 5980 2 6201 2 9925 2 6894 3 1338 3 6477 3 6242 3 3632 Every row represents the two input values... (2 Replies)
Discussion started by: Gussifinknottle
2 Replies

7. UNIX for Dummies Questions & Answers

multiple variables in for loop

hi, I want an equivalent for loop for this C code in unix shell script... for(int i,int j;i<5;i++,j++) { } Please reply soon Regards Navjot (1 Reply)
Discussion started by: navjotsingh
1 Replies

8. Shell Programming and Scripting

While loop with Multiple variables

Hi , I am trying to write a script in kshell with while loop ,its like count=1 count_cmp=1 while ; do tail -$count tempfile | head -1 > tempstring ....... done However i get CIF.sh: line 33: ' I have checked thetrailing spaces , not sure what is... (4 Replies)
Discussion started by: amit1_x
4 Replies

9. Shell Programming and Scripting

for loop with multiple variables ?

I have a script which selects two 'sets' of system LVM device files from a tabular file 'mapfile' using awk : LIVELV=`awk '{print($1)}' mapfile` BCVLV=`awk '{print($3)}' mapfile` I wanted to pass these 'sets' into an LVM command 'loop' along the lines of : lvmerge $BCVLV $LIVELV ie.... (3 Replies)
Discussion started by: fosterian
3 Replies
Login or Register to Ask a Question