Visit Our UNIX and Linux User Community


Multi Dimensional array


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Multi Dimensional array
# 1  
Old 02-01-2018
Hammer & Screwdriver Multi Dimensional array

I have an array of names. Each one of the name, has a number represented to it.

For example A has an ID 8, B has an ID 2.

What I am after is a for loop that when the array is in position 1, a particular variable is set to the value of position 1 in array 2


Code:
declare -a arr=("A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K")
declare -a arr2=("8" "2" "3" "4" "1" "9" "5" "6" "7" "10" "11")

for names in "${arr[@]}";
do
echo data=`grep id=$(here the value from array2) /test/test.txt`

Let's say for loop is in position 0 reading value A, therefore code should read

Code:
echo data = `grep id=8 /test/test.txt`

then when array is reading value B in position 1, array2 should read value 2. and etc.

Is there a way how this can be achieved?

Can somebody help me how this can be achieved?
# 2  
Old 02-01-2018
why is arr needed?
Code:
arr=("A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K")
arr2=("8" "2" "3" "4" "1" "9" "5" "6" "7" "10" "11")

for names in {1..${#arr2[*]}}
do
   echo data="`grep id=${arr2[(($names - 1))]} /test/test.txt`"
done

---------- Post updated at 01:26 PM ---------- Previous update was at 01:01 PM ----------

If an array was associative then keys and values can be accessed as (ex.):
Code:
arr=([A]="8" [B]="2" [C]="3")

for key in ${!arr[@]}
do
   echo key: $key value: ${arr[$key]}
done

This User Gave Thanks to rdrtx1 For This Post:
# 3  
Old 02-01-2018
Does your shell support associative arrays as well as indexed arrays?

What shell are you using? What version of that shell are you using?

Nothing in your loop is using the values found in array arr. Why not just replace your current loop with:
Code:
for names in "${arr2[@]}";
do
echo data=$(grep "id=$names" /test/test.txt)
done

Since you haven't told us what shell you're using, the following is pure conjecture, but it will work with some shells...

If you need corresponding values from both arrays, have you considered something more like:
Code:
arr=("A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K")
arr2=("8" "2" "3" "4" "1" "9" "5" "6" "7" "10" "11")
for ((i=0; i < ${#arr[@]}; i++))
do	echo "arr[$i] is ${arr[$i]}, arr2[$i] is ${arr2[$i]}"
done

(which works with recent versions of both ksh and bash)?

With both of those shells, the above script produces the output:
Code:
arr[0] is A, arr2[0] is 8
arr[1] is B, arr2[1] is 2
arr[2] is C, arr2[2] is 3
arr[3] is D, arr2[3] is 4
arr[4] is E, arr2[4] is 1
arr[5] is F, arr2[5] is 9
arr[6] is G, arr2[6] is 5
arr[7] is H, arr2[7] is 6
arr[8] is I, arr2[8] is 7
arr[9] is J, arr2[9] is 10
arr[10] is K, arr2[10] is 11

This User Gave Thanks to Don Cragun For This Post:
# 4  
Old 02-01-2018
As a bit of a digression it is also true in both bash and ksh that the index for arrays (between [ and ]) can be an arithmetic expression.

So in the above posts ${arr2[(($names - 1))]} can be replaced with ${arr2[names-1]} and
${arr[$i]} can be replaced with ${arr[i]}
# 5  
Old 02-01-2018
Quote:
Originally Posted by Chubler_XL
As a bit of a digression it is also true in both bash and ksh that the index for arrays (between [ and ]) can be an arithmetic expression.

So in the above posts ${arr2[(($names - 1))]} can be replaced with ${arr2[names-1]} and
${arr[$i]} can be replaced with ${arr[i]}
Yes. But, ksh and bash don't handle everything used as a subscript the same way. With the following code:
Code:
abc=5
arr=(A B C D E F G H I J K)
arr2=(8 2 3 4 1 9 5 6 7 10 11)
echo ${arr[arr2[abc-1]]}

ksh version 93u+ gives me:
Code:
B

while bash version 3.2.57(1) gives me:
Code:
A

and the diagnostic:
Code:
bash: arr2: bad array subscript

To make that work correctly in both bash and ksh, I have to use:
Code:
echo ${arr[${arr2[abc-1]}]}

I believe there are other differences as well, so I tend to use more code than needed when writing array element references that I want to be portable across various shells that support arrays.

The standards don't yet specify shell array variables, so each shell decides what shortcuts, if any, can be taken when referencing arrays if that shell supports arrays at all.
# 6  
Old 02-01-2018
Thanks for that, I can't help thinking that the bash 3.2.57(1) result is a bug.

It works fine and returns B in 4.4.12(1). Does a assignment also fail with the same error in 3.2.57(1)?

Code:
arr[arr2[abc-1]]="TEST"

# 7  
Old 02-02-2018
The command sequence:
Code:
abc=5
arr=(A B C D E F G H I J K)
arr2=(8 2 3 4 1 9 5 6 7 10 11)

arr[arr2[abc-1]]="TEST"

printf '%s\n' "${arr[@]}"

produces the output:
Code:
A
TEST
C
D
E
F
G
H
I
J
K

with both ksh 93u+ and bash 3.2.57(1).

Previous Thread | Next Thread
Test Your Knowledge in Computers #971
Difficulty: Medium
Linux device drivers and kernel extensions do not run directly in kernel space.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Multi Dimensional array in bash

Hi, I'm developing a script which contains a multi dimensional array, however for some reason the array is not iterating. When executing the script, services are listed as arguments from argument 2. Ex voice data sms. service=${@:2}; for services in $service do ... (2 Replies)
Discussion started by: nms
2 Replies

2. UNIX for Dummies Questions & Answers

Help: stdin to multi-dimensional array

I cant get out of this while loop at the beginning of my program. Just reading from stdin one char at a time and storing it into a multi-array. Need to fix it with in two hours. #include <sys/wait.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include... (1 Reply)
Discussion started by: unt_engn
1 Replies

3. Shell Programming and Scripting

sorting multi dimensional array

Hi there, Can someone let me know how to sort the 2 dimensional array below by column 1 then by column 2? 22 55 2222 2230 33 66 44 58 222 240 11 25 22 60 33 45 output: 11 25 22 55 22 60 33 45 33 66 44 58 (6 Replies)
Discussion started by: phoeberunner
6 Replies

4. Shell Programming and Scripting

Match elements in an AWK multi-dimensional array

Hello, I have two files in the following format; file1: A B C D E F G H I J K L file2: 1 2 3 4 5 6 7 8 9 10 11 12 I have read them both in to multi-dimensional arrays. I need a file that has column 2 of the first file printed out for each column 3 of the second file ie... ... (3 Replies)
Discussion started by: cold_Que
3 Replies

5. Shell Programming and Scripting

PHP: Search Multi-Dimensional(nested) array and export values of currenly worked on array.

Hi All, I'm writing a nagios check that will see if our ldap servers are in sync... I got the status data into a nested array, I would like to search key of each array and if "OK" is NOT present, echo other key=>values in the current array to a variable so...eg...let take the single array... (1 Reply)
Discussion started by: zeekblack
1 Replies

6. Shell Programming and Scripting

PHP: how can I delete empty/NULL elements from a multi-dimensional array.

Hi all I have a file that i'm running and exec(cat ./dat) against..and putting its contents into any array, then doing an exploding the array into a multi-dimension array... The 15 multi-dimensional arrays have elements that are null/empty, I would like to remove/unset these elements and then... (2 Replies)
Discussion started by: zeekblack
2 Replies

7. Shell Programming and Scripting

Manipulating Pick multi dimensional data with awk.

Hi. I am reasonably new to awk, but have done quite a lot of unix scripting in the past. I have resolved the issues below with unix scripting but it runs like a dog. Moved to awk for speed and functionality but running up a big learning curve in a hurry, so hope there is some help here. I... (6 Replies)
Discussion started by: mike.strategis
6 Replies

8. Shell Programming and Scripting

Multi Dimensional array in KSH

Is there any way to use multi dim. array in KSH ? (1 Reply)
Discussion started by: sinpeak
1 Replies

9. Programming

Multi-Dimensional Arrays

So, I'm fooling around with multi demtional arrays, and I made this in a short amount of time: #include <stdio.h> main(int argc, char *argv) { char blah = { {'a', 'b'}, {'b', 'a'} }; int i = 0; while (i < 2) { if (argv == blah) printf("%c\n", blah); i++; } } The goal... (3 Replies)
Discussion started by: Octal
3 Replies

10. Shell Programming and Scripting

Can there be multi-dimensional variable arrays in borne shell?

Hello - I've serached the web but can't find much on array script variables (except that C-shell variables are arrays!) I'm trying to form a 2-D string array: (this is what I want, but in java) String list = { {"one", "two"}, {"three"} }; I know this is a 1-D string array shell... (4 Replies)
Discussion started by: jparker
4 Replies

Featured Tech Videos