The UNIX and Linux Forums  
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.

Go Back   The UNIX and Linux Forums > Top Forums > UNIX for Advanced & Expert Users
.
google unix.com



UNIX for Advanced & Expert Users Expert-to-Expert. Learn advanced UNIX, UNIX commands, Linux, Operating Systems, System Administration, Programming, Shell, Shell Scripts, Solaris, Linux, HP-UX, AIX, OS X, BSD.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
array ccp Shell Programming and Scripting 3 02-26-2008 03:19 AM
create array holding characters from sring then echo array. rorey_breaker Shell Programming and Scripting 5 09-28-2007 08:42 AM
Array in awk koti_rama Shell Programming and Scripting 2 08-02-2007 08:54 AM
looping a array inside inside ssh is not working, pls help reldb Shell Programming and Scripting 5 07-07-2006 10:32 AM
array rajan_ka1 Shell Programming and Scripting 2 03-08-2006 03:03 AM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Powered by Powered by Google
 
LinkBack Thread Tools Search this Thread Rate Thread Display Modes
  #1 (permalink)  
Old 08-22-2007
manas_ranjan's Avatar
manas_ranjan manas_ranjan is offline
Registered User
  
 

Join Date: Jul 2007
Location: Amsterdam
Posts: 177
Array inside an array

hi All,

I have a array as follows,

array1=("xx" "abc" "def" "xyz")
and each array1[index] is also storing some array values, like

array1[1]=abc
and abc=("a" "b" "c") etcetera etcetra.........

Note : each subarray under array1 have index 3 i.e. it can max contain 3 values

if i echo ${abc[index]} [ where index is 1,2,3...] it works fine.

but if i loop thru it's not printing the values, can anybody help me solving this thru loop,

my loop goes like this


cnt=1
total_Array=${#array1[*]}
no_loop_thru=${#abc[*]}

while [ $cnt -lt $total_Array ]
do
srch_fld=`echo ${array1[$cnt]}`
j=1
while [ $j -le $no_loop_thru ]
do
#var1=`$srch_fld[$j]`
#echo ${var1}
echo ${srch_fld[$j]}
j=`expr $j + 1`
done
cnt=`expr $cnt + 1`
done


can anybody suggest any improvement on this......LOOP
  #2 (permalink)  
Old 08-22-2007
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Location: Ashburn, Virginia
Posts: 9,111
Code:
$ cat arrayloop
#! /usr/local/bin/bash

abc=(a b c)
def=(d e f)
ghi=(g h i)
array1=(abc def ghi)
cnt=0
total_Array=${#array1[*]}
no_loop_thru=${#abc[*]}

while [ $cnt -lt $total_Array ] ; do
        srch_fld=${array1[$cnt]}
        j=0
        while [ $j -le $no_loop_thru ] ; do
                eval var1=\${$srch_fld[$j]}
                echo ${var1}
                ((j=j+1))
        done
        ((cnt=cnt+1))
done
exit 0
$ ./arrayloop
a
b
c

d
e
f

g
h
i

$
  #3 (permalink)  
Old 08-23-2007
manas_ranjan's Avatar
manas_ranjan manas_ranjan is offline
Registered User
  
 

Join Date: Jul 2007
Location: Amsterdam
Posts: 177
Quote:
Originally Posted by Perderabo View Post
Code:
$ cat arrayloop
#! /usr/local/bin/bash

abc=(a b c)
def=(d e f)
ghi=(g h i)
array1=(abc def ghi)
cnt=0
total_Array=${#array1[*]}
no_loop_thru=${#abc[*]}

while [ $cnt -lt $total_Array ] ; do
        srch_fld=${array1[$cnt]}
        j=0
        while [ $j -le $no_loop_thru ] ; do
                eval var1=\${$srch_fld[$j]}
                echo ${var1}
                ((j=j+1))
        done
        ((cnt=cnt+1))
done
exit 0
$ ./arrayloop
a
b
c

d
e
f

g
h
i

$

hey i got alternative method as follows,
while [ $j -le $no_loop_thru ] ; do
var1=$srch_fld[$j]
echo ${!var1}
((j=j+1))
done
  #4 (permalink)  
Old 08-23-2007
manas_ranjan's Avatar
manas_ranjan manas_ranjan is offline
Registered User
  
 

Join Date: Jul 2007
Location: Amsterdam
Posts: 177
The question remains same, but now the representation changed,

let

abc=(a b c)
def=(d e f)
ghi=(g h i)
array1=(abc def ghi)


now thing is in sub array i know the content or size, let here it is 3
so i want my o/p should come like
abc(1)=a
def(1)=d
ghi(1)=g

then
abc(2)=b
def(2)=e
ghi(2)=h


etcetera etcetera.......

can anybody help me out to achieve it ?????
  #5 (permalink)  
Old 08-23-2007
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Location: Ashburn, Virginia
Posts: 9,111
The first element of an array is 0, not 1.
var1=$srch_fld[$j]
echo "${srch_fld}(${j}) = ${!var1}"
will give you the correct indices. If you want to pretend that the first index is 1, you could use:
echo "${srch_fld}($((j+1))) = ${!var1}"
  #6 (permalink)  
Old 06-10-2008
Yama Yama is offline
Registered User
  
 

Join Date: Jun 2008
Posts: 1
Modifying the code from Perderabo, how would you handle different-sized arrays in the inner while loop? For example, let's change the code to be:

Code:
$ cat arrayloop
#! /usr/local/bin/bash

abc=(a b c x y)
def=(d e f z)
ghi=(g h i)
array1=(abc def ghi)
cnt=0
total_Array=${#array1[*]}

while [ $cnt -lt $total_Array ] ; do
        srch_fld=${array1[$cnt]}
        j=0
        while [ $j -le <????> ] ; do
                eval var1=\${$srch_fld[$j]}
                echo ${var1}
                ((j=j+1))
        done
        ((cnt=cnt+1))
done
exit 0
$ ./arrayloop
a
b
c
x
y

d
e
f
z

g
h
i

$
We can't use the original no_loop_thru variable since the arrays are of varying length. I realize we need to get the length of srch_fld but I'm unable to get the syntax right ...
Sponsored Links
Closed Thread

Bookmarks

Tags
bash, bash eval, eval

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT -4. The time now is 05:17 AM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios
The UNIX and Linux Forums Content Copyright ©1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant URLs by vBSEO 3.2.0