Help needed on Associative array in awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help needed on Associative array in awk
# 1  
Old 03-06-2012
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
Code:
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 col1 using associative array as below.
Code:
awk '{a[$1]+=$3;b[$1]+=$4;c[$1]++} END {for (i in c) {print i,a[i]/c[i],b[i]/c[i]}}' Test.txt

But, all i need is to get the average on col3 based on col1 and col4 based on col2. I need the result like the below.
Code:
COL1 COL2 COL3
1 500 500
2 290 290
3 100 100

Still i tried this..
Code:
awk '{a[$1]+=$3;b[$1]+=$4;c[$1]++;d[$2]++} END {for (i in c) {print i,a[i]/c[i],b[i]/d[i]}}' Test.txt

But it seems to be not working.. Please advice me !!

Last edited by imsularif; 03-06-2012 at 09:59 AM.. Reason: content of the example file updated
# 2  
Old 03-06-2012
Quote:
But, all i need is to get the average on col3 based on col1 and col4 based on col2. I need the result like the below.
Code:
COL1 COL2 COL3
1 500 500
2 290 290
3 100 100

Within your sample result, COL3 is not the average on col4 based on col2 but the sum of col4 based on col1.

From your requirement, I don't understand how you can mix in the same output value of col1, average based on col1 and average base on col2.


Jean-Pierre.
# 3  
Old 03-06-2012
Thanks Jean-Pierre for the reply.

To understand the requirement, All the columns in the test.txt are independent and no relation between. in other words, it is source file.

the output derived from the file should be

TGT_COL1 TGT_COL2 TGT_COL3
1 500 500
2 290 290
3 100 100

ie: TGT_COL2 = sum of SRC_COL2 / unique count of SRC_COL1
TGT_COL3= sum of SRC_COL4 / unique count of SRC_COL2


PS : I have updated the test.txt in the subject post.

Thanks
# 4  
Old 03-06-2012
Sorry, I still do not understand your request.
In your example, the column TGT_COL3 not seem to be an average but rather a sum.

Can you explain in details how you get your output.

Jean-Pierre.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

awk Associative Array and/or Referring to Field by String (Nonconstant String Value)

I will start with an example of what I'm trying to do and then describe how I am approaching the issue. File PS028,005 Lexeme HRS # M # PhraseType 1(1:1) 7(7) PhraseLab 501 503 ClauseType ZYq0 PS028,005 Lexeme W # L> # BNH # M #... (17 Replies)
Discussion started by: jvoot
17 Replies

2. 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

3. 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

4. Shell Programming and Scripting

Awk: Dealing with whitespace in associative array indicies

Is there a reliable way to deal with whitespace in array indicies? I am trying to annotate fails in a database using a table of known fails. In a begin block I have code like this: # Read in Known Fail List getline < "'"$failListFile"'"; getline < "'"$failListFile"'"; getline <... (6 Replies)
Discussion started by: Michael Stora
6 Replies

5. 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

6. 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

7. 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

8. Shell Programming and Scripting

Problem with lookup values on AWK associative array

I'm at wits end with this issue and my troubleshooting leads me to believe it is a problem with the file formatting of the array referenced by my script: awk -F, '{if (NR==FNR) {a=$4","$3","$2}\ else {print a "," $0}}' WBTSassignments1.txt RNCalarms.tmp On the WBTSassignments1.txt file... (2 Replies)
Discussion started by: JasonHamm
2 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