Bash 3d associative array with bash3 AND multiple files


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Bash 3d associative array with bash3 AND multiple files
# 1  
Old 08-28-2014
Bash 3d associative array with bash3 AND multiple files

Hello again guru’s (big apologies for wall of text)

Still working on that DNS updater for my production team and while there is a ton of hit in searches i can't seem to find the answer to this.

Context:

We have apps that switch from let’s say host1 to host2. REAL basic DNS clustering if you like.

The autosys process goes like this:

- Connect to the DNS.

- modify Aliases files:



Code:
INCL_ABCprod: abcprod IN CNAME  toto1. -> autosys magic cp -> INCL_ABCprod: abcprod IN CNAME toto2.
INCL_ABCpprod:abcpprod IN CNAME toto3. -> autosys magic cp -> INCL_ABCpprod: abcpprod IN CNAME toto3.
INCL_ABCprod2:abcsprod2 IN CNAME toto2. -> autosys magic cp -> INCL_ABCprod2: abcsprod IN CNAME toto1.

Files are straight up modified by cp.

- Hosts_to_named script recreates the named.conf file

- Restart named


Now the logical thing would be to give each application team the nsupdate commands so they have complete control over the DNS process BUT like in many companies they want US to make it work and if everything works well make the teams individually make the transition.

SOOO at first I tought…. Let’s build an associative array… Bash3 … dang.

Well that sucks…

How about this…

Code:
Bash$ cat /etc/named.data/INCL*
toto       IN           CNAME                host1
titi          IN           CNAME                host2

toto = key
host1 = value

Code:
#!/bin/bash
 
cname=($(awk '{print $1}' /etc/named.data/INCL*))
host=($(awk '{print $4}' /etc/named.data/INCL*))
 
 
for ((i=0 ; i<${#cname[@]} ; i++ )) do
        echo "==============================="
        echo "${cname[$i]}" IN "${host[$i]}"
        echo "==============================="
done

That seems to work … but it doesn’t. For a reason I can’t explain I can’t guaranty that the value is associated with the key

How can I make sure I my association is correct?

BONUS ROUND

One thing I forgot to mention is that when I’ll have my key=value I will be able to build my nsupdate request. Fine and dandy BUT thing is I have 1000 records in my aliases files….

With the old process, flat files do not put a burden on the host. Restart dns and be done with it. With 1000 nsupdate request everytime ONE app is switched (delete the old value, prereq nxrrset and put the new in) that will probably be not very good my server (maybe not but i'll test for sure).

SO I tought… what If I check that only files that where modified today? Since autosys process does a simple basic cp.

Code:
Bash$ find /etc/named.data/ -type f -name "INCL*" -daystart -mtime 0

So normally something like this should be perfect?

Code:
results=$(find /etc/named.data/ -name "INCL*" -daystart -mtime 0)
 
cname=($(awk '{print $1}' ${results}))
real=($(awk '{print $4}' ${results}))

But again I cannot guaranty perfect key=value

If somebody has a clue that would be great!

Thanks.

---------- Post updated at 11:09 AM ---------- Previous update was at 07:59 AM ----------

What if i do .....

Include a : between my key and value and parse threw my array using parameter substitution?

That seems to work

Code:
array=($(awk '{print $1" : "$4}' /etc/named.data/*))

for toto in " ${array[@]}" ; do
   KEY=${toto%%:*}
   VALUE=${toto#*:}
done

# 2  
Old 08-28-2014
what if you let bash read it into separate variables?

Code:
while read -r key _ _ value _; do
  echo "$key $value"
done < <(find ... -exec cat {} +)

This User Gave Thanks to neutronscott For This Post:
# 3  
Old 08-28-2014
Works like a charm but can you describe the KEY _ _ VALUE _ ? The man page doesn't say much. Thanks!

Last edited by rbatte1; 08-28-2014 at 10:21 AM.. Reason: Added ICODE tags
# 4  
Old 08-28-2014
That will read into 5 variables, of which the dummy variable "_" will consume items 2, 3, and 5+. KEY will assume the first field's content, and VALUE the fourth's.
This User Gave Thanks to RudiC For This Post:
# 5  
Old 08-28-2014
read splits the line into fields like word splitting (using IFS) and assigns to each name given. It is common practice to use _ as a place holder for unused fields. If I left out the final _ and the line had more than 4 fields, the remainder would end up in $value

I hope this helps
This User Gave Thanks to neutronscott For This Post:
# 6  
Old 08-28-2014
Sure does! Thanks all!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Associative array index question

I am trying to assign indexes to an associative array in a for loop but I have to use an eval command to make it work, this doesn't seem correct I don't have to do this with regular arrays For example, the following assignment fails without the eval command: #! /bin/bash read -d "\0" -a... (19 Replies)
Discussion started by: Riker1204
19 Replies

2. Shell Programming and Scripting

Using associative array for comparison

Hello together, i make something wrong... I want an array that contains information to associate it for further processing. Here is something from my bash... You will know, what I'm trying to do. I have to point out in advance, that the variable $SYSOS is changing and not as static as in my... (2 Replies)
Discussion started by: Decstasy
2 Replies

3. Shell Programming and Scripting

Morse Code with Associative Array

Continuing my quest to learn BASH, Bourne, Awk, Grep, etc. on my own through the use of a few books. I've come to an exercise that has me absolutely stumped. The specifics: 1. Using ONLY BASH scripting commands (not sed, awk, etc.), write a script to convert a string on the command line to... (22 Replies)
Discussion started by: ksmarine1980
22 Replies

4. Shell Programming and Scripting

Associative Array with more than one item per entry

Hi all I have a problem where i have a large list ( up to 1000 of items) and need to have 2 items pulled from it into variables in a bash script my list is like the following and I could have it as an array or possibly an external text file maintained separately. Every line is different and... (6 Replies)
Discussion started by: kcpoole
6 Replies

5. Shell Programming and Scripting

Associative array

I have an associative array named table declare -A table table="fruit" table="veggie" table="GT" table="eminem" Now say I have a variable returning the value highway How do I find corresponding value GT ?? (this value that I find (GT in this case) is supposed to be the name of a mysql... (1 Reply)
Discussion started by: leghorn
1 Replies

6. Shell Programming and Scripting

Split string into map (Associative Array)

Hi Input: { committed = 782958592; init = 805306368; max = 1051394048; used = 63456712; } Result: A map (maybe Associative Array) where I can iterate through the key/value. Something like this: for key in $map do echo key=$key value=$map done Sample output from the map: ... (2 Replies)
Discussion started by: chitech
2 Replies

7. Shell Programming and Scripting

Help needed on Associative array in awk

Hi All, I got stuck up with shell script where i use awk. The scenario which i am working on is as below. I have a file text.txt with contents COL1 COL2 COL3 COL4 1 A 500 400 1 B 500 400 1 A 500 200 2 A 290 300 2 B 290 280 3 C 100 100 I could able to sum col 3 and col4 based on... (3 Replies)
Discussion started by: imsularif
3 Replies

8. Shell Programming and Scripting

awk, associative array, compare files

i have a file like this < '393200103052';'H3G';'20081204' < '393200103059';'TIM';'20110111' < '393200103061';'TIM';'20060206' < '393200103064';'OPI';'20110623' > '393200103052';'HKG';'20081204' > '393200103056';'TIM';'20110111' > '393200103088';'TIM';'20060206' Now i have to generate a file... (9 Replies)
Discussion started by: shruthi123
9 Replies

9. Shell Programming and Scripting

Perl: Sorting an associative array

Hi, When using sort on an associative array: foreach $key (sort(keys(%opalfabet))){ $value = $opalfabet{$key}; $result .= $value; } How does it handle double values? It seems to me that it removes them, is that true? If so, is there a way to get... (2 Replies)
Discussion started by: tine
2 Replies

10. Shell Programming and Scripting

Associative Array

Hi, I am trying to make an associative array to use in a popup_menu on a website. Here is what i have: foreach $entr ( @entries ) { $temp_uid = $entr->get_value(uid); $temp_naam = $entr->get_value(sn); $s++; } This is the popup_menu i want to use it in. popup_menu(-name=>'modcon',... (4 Replies)
Discussion started by: tine
4 Replies
Login or Register to Ask a Question