Visit Our UNIX and Linux User Community


Computing data in awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Computing data in awk
# 1  
Old 09-11-2009
Question Computing data in awk

Hello,
I am a newbie in programing. I want to compute the following in awk.
I have the following data file:

ID Value1 Value2 Value3
sade 0.21 0.45 23
foly 0.31 0.34 43
jude 0.40 0.11 63
jude 0.53 0.32 34
sade 0.67 0.49 66
foly 0.30 0.20 56

I want to take an ID “sade” , then take its value3 which is 23 and divide it with sum of value3 (23+66=89) like 23/89=0.258. then multiply it with value1 and value2 and then sum it.
For sade:
res=23/89
L1[ID]=L1[ID]+(res * 0.21)
L2[ID]=L2[ID]+(res * 0.45)

Now for the second “sade” record
res=66/89
L1[ID]=L1[ID]+(res * 0.67)
L2[ID]=L2[ID]+(res * 0.49)

Similar calculations for other IDs (jude,foly) as well.
Thank you so much for your help.
Regards,
Ubee

Last edited by ubeejani; 09-11-2009 at 10:30 AM..
# 2  
Old 09-11-2009
For clarity can you post desired result. It will help to understand the logic.

---------- Post updated at 01:11 PM ---------- Previous update was at 12:57 PM ----------

Quote:
Originally Posted by ubeejani
... with sum of value3 (23+66=98) ...
Hmm! 23+66=89 in my logic.
# 3  
Old 09-11-2009

Code:
awk '{
 v1[$1] += $1
 v2[$1] += $2
 v3[$1] += $3
}
END {
for ( x in v1 )
  print x, v1[x], v3[x], v3[x] 
}' "$file"

# 4  
Old 09-11-2009
ripat! thanks for the correction.I was in hurry. Smilie
For each of the ID I want the following output:

L1[sade]=(resi * 0.21)+ (resj * 0.67) where resi =23/89 and resj =66/89
L2[sade]=(resi * 0.45)+ (resj * 0.49)

L1[foly]=( resi * 0.31)+ (resj * 0.30) where resi =43/99 and resj =56/99
L2[foly]=( resi * 0.34)+ (resj * 0.20)

L1[jude]=( resi * 0.40)+ (resj * 0.53) where resi =63/97 and resj =34/97
L2[jude]=( resi * 0.11)+ (resj * 0.32)

I hope you got the logic.
Thanks a lot.
Regards,
Ubee

---------- Post updated at 04:09 PM ---------- Previous update was at 03:23 PM ----------

cfajohnson !
In this code you didn't consider the value of "res" which is for "sade, res=23/89 and 66/89". Similarly for jude and foly. Please check my last message. I hope you will get my point.
Thank you.
Quote:
Originally Posted by cfajohnson

Code:
awk '{
 v1[$1] += $1
 v2[$1] += $2
 v3[$1] += $3
}
END {
for ( x in v1 )
  print x, v1[x], v3[x], v3[x] 
}' "$file"

# 5  
Old 09-11-2009
Is this what you are after?

Code:
awk '
NR==FNR{tot[$1]+=$4;l2[$1]=$2;l3[$1]=$3;l4[$1]=$4;next}
{
	print sprintf("L1[%s]=%f\nL2[%s]=%f\n",
	$1, ($4/tot[$1]*$2)+(l4[$1]/tot[$1]*l2[$1]),
	$1, ($4/tot[$1]*$3)+(l4[$1]/tot[$1]*l3[$1]))
}' yourFile yourFile

On the sample file given above, it produces this output:

Code:
L1[sade]=0.551124
L2[sade]=0.479663

L1[foly]=0.304343
L2[foly]=0.260808

L1[jude]=0.445567
L2[jude]=0.183608

L1[jude]=0.371546
L2[jude]=0.224330

L1[sade]=0.993708
L2[sade]=0.726742

L1[foly]=0.339394
L2[foly]=0.226263

# 6  
Old 09-11-2009
Bravo!!! Smilie
It is working perfectly.
Thank you ripat and cfajohnson for your time.
I appreciate your cooperation.

Regards,
Ubee
# 7  
Old 09-14-2009
Code:
my %hash;
open FH,"<a";
while(<FH>){
 chomp;
 my @tmp=split;
 push @{$hash{$tmp[0]}->{val}}, $_;
 $hash{$tmp[0]}->{sum}+=$tmp[3];
}
close FH;
foreach my $key(keys %hash){
 my @tmp=@{$hash{$key}->{val}};
 for(my $i=0;$i<=$#tmp;$i++){
   my @t=split(" ",$tmp[$i]);
   print $hash{$key}->{sum};
   print $tmp[$i]," ",$t[1]*$t[3]/$hash{$key}->{sum}," ",$t[2]*$t[3]/$hash{$key}->{sum},"\n";
 }
}


Previous Thread | Next Thread
Test Your Knowledge in Computers #652
Difficulty: Easy
Puffy is the mascot of Linux Mint.
True or False?

8 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk --> math-operation in data-record and joining with second file data

Hi! I have a pretty complex job - at least for me! i have two csv-files with meassurement-data: fileA ...... (2 Replies)
Discussion started by: IMPe
2 Replies

2. UNIX for Dummies Questions & Answers

Computing for linearly-interpolated values using awk

Hi, I want to compute for linearly-interpolated values for my data using awk, any help is highly appreciated. How do I apply the linear interpolation formula to my data in awk given the equation below: x y 15 0 25 0.1633611 35 0.0741623 desired output: linear interpolation at... (4 Replies)
Discussion started by: ida1215
4 Replies

3. Shell Programming and Scripting

Help with parsing data with awk , eliminating unwanted data

Experts , Below is the data: --- Physical volumes --- PV Name /dev/dsk/c1t2d0 VG Name /dev/vg00 PV Status available Allocatable yes VGDA 2 Cur LV 8 PE Size (Mbytes) 8 Total PE 4350 Free PE 2036 Allocated PE 2314 Stale PE 0 IO Timeout (Seconds) default --- Physical volumes ---... (5 Replies)
Discussion started by: rveri
5 Replies

4. Shell Programming and Scripting

Computing the ratio of similar columns in the two files using awk script

Thanks Bartus11 for your help in the following code to compare the two files "t1" and "t2". awk 'NR==FNR{a=1;next}$2 in a{print $2}' t1 t2 First can anyone explain that what is the purpose of assigning a =1? Second, the current script is printing out the matched columns between the... (4 Replies)
Discussion started by: coder83
4 Replies

5. Shell Programming and Scripting

AWK help. how to compare a variable with a data array in AWK?

Hi all, i have a data array as follows. array=ertfgj2345 array=456ttygkd . . . array=errdjt3235 so number or elements in the array can varies depending on how big the data input is. now i have a variable, and it is $1 (there are $2, $3 and so on, i am only interested in $1). ... (9 Replies)
Discussion started by: usustarr
9 Replies

6. Virtualization and Cloud Computing

Cloud Enabling Computing for the Next Generation Data Center

Hear how the changing needs of massive scale-out computing is driving a transfomation in technology and learn how HP is supporting this new evolution of the web. More... (1 Reply)
Discussion started by: Linux Bot
1 Replies

7. Virtualization and Cloud Computing

Event Cloud Computing - IBM Turning Data Centers Into ?Computing Cloud?

Tim Bass Thu, 15 Nov 2007 23:55:07 +0000 *I predict we may experience less*debates*on the use of the term “event cloud”*related to*CEP in the future, now that both IBM and Google* have made announcements about “cloud computing” and “computing cloud”, IBM Turning Data Centers Into ‘Computing... (0 Replies)
Discussion started by: Linux Bot
0 Replies

8. Cybersecurity

Trusted Computing

About a year ago, a friend of mine who worked on the OReilly Snort book took a propsal he and I had worked on for a book on Trusted Computing. Though the editor thought the content was good and worthwhile, he felt that there wasn't enough of a market to justify printing such a work. How many... (0 Replies)
Discussion started by: kduffin
0 Replies

Featured Tech Videos