calculate the average of time series data using AWK


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting calculate the average of time series data using AWK
# 1  
Old 12-23-2008
calculate the average of time series data using AWK

Hi,

I have two time series data (below) merged into a file.
t1 and t2 are in unit of second

I want to calculate the average of V1 every second and count how many times "1" in V2 is occur within a second


Input File:

t1 V1 t2 V2
10.000000 4.387413 10.139355302 1
10.100000 4.397372 10.252770182 1
10.200000 4.406951 10.398060182 1
10.300000 3.940732 10.515105302 1
10.400000 4.044359 10.645365302 1
10.500000 4.139778 10.768800182 1
10.600000 4.222087 10.929725222 1
10.700000 4.299174 11.106285302 1
10.800000 2.941378 11.216505302 1
10.900000 3.081282 11.324910182 1
11.000000 3.219284 11.626115222 1
11.100000 3.354575 11.822715302 1
11.200000 3.486347 11.968005302 1
11.300000 3.613792 12.107075222 1
11.400000 3.730119 12.233535302 1
11.500000 3.846800 12.377615222 1
11.600000 3.956768 12.494055302 1
11.700000 4.059215 12.642540182 1
11.800000 4.153333 12.742740182 1
11.900000 4.234293 12.853565222 1
12.000000 4.309844 13.093440182 1
12.100000 2.107283 13.209275222 1
12.200000 2.234828 13.343940182 1
12.300000 2.371988 13.471005302 1
12.400000 2.511328 13.635125222 1
12.500000 2.652041 13.824900182 1
12.600000 2.793317 13.955160182 1
12.700000 2.934348 14.082225302 1
12.800000 3.067364 14.185620182 1
12.900000 3.205592 14.302665302 1
13.000000 4.130738 14.421090182 1
13.100000 3.929949 14.707265222 1
13.200000 2.160613 14.828715302 1
13.300000 2.296229 14.938935302 1
13.400000 2.434470 15.114285302 1
13.500000 2.574528 15.242730182 1
13.600000 3.865811 15.485025302 1
13.700000 4.273357 15.660375302 1
13.800000 4.357861 15.895845302 1
13.900000 4.371735 16.034310182 1
14.000000 4.377158 16.150145222 1
..............
..............



Desired Output:

t1 V1 V2
10.000000 3.986053 7
11.000000 3.765453 6
12.000000 2.818793 7
13.000000 3.439529 7
...............
...............


Please, can anyone tell me AWK code for calculating this..??

Thanks
# 2  
Old 12-23-2008
nawk -f nica.awk myFile

nica.awk:
Code:
{
   v1S[int($1)]+=$2
   v1N[int($1)]++

   if ($NF == "1") v2N[int($3)]++
}
END {
  for(i in v1S)
    printf("%.6f%s%.6f%s%d\n", i, OFS, v1S[i]/v1N[i], OFS, v2N[i])
}


Last edited by vgersh99; 12-23-2008 at 09:33 AM..
# 3  
Old 12-24-2008
Hi vgersh99,

Thanks for the code....Smilie
# 4  
Old 12-24-2008
Hi,

I have another request..

here, V2 is a counter
I want to match V2 value with the V1 value with the same time series (t1) before V2 counter get reset to "1"..
e.g. 1,2,3,1 ---> I want to get value of V1 when value of V2 is "3" (before reset to "1")
or
e.g. 1,2,1,1,1, ---> I want to get the value of V1 when value of V2 are "2" followed by three consecutive "1"


Input File:

t1 V1 t2 V2
10.000000 4.387413 10.139355302 1
10.100000 4.397372 10.252770182 2
10.200000 4.406951 10.398060182 1
10.300000 3.940732 10.515105302 1
10.400000 4.044359 10.645365302 1
10.500000 4.139778 10.768800182 2
10.600000 4.222087 10.929725222 3
10.700000 4.299174 11.106285302 1
10.800000 2.941378 11.216505302 1
10.900000 3.081282 11.324910182 2
11.000000 3.219284 11.626115222 3
11.100000 3.354575 11.822715302 4
11.200000 3.486347 11.968005302 5
11.300000 3.613792 12.107075222 1
11.400000 3.730119 12.233535302 1
11.500000 3.846800 12.377615222 1
11.600000 3.956768 12.494055302 1
11.700000 4.059215 12.642540182 1
11.800000 4.153333 12.742740182 1
11.900000 4.234293 12.853565222 1
12.000000 4.309844 13.093440182 1
..............
..............



Desired Output:

t1 V1 V2
10.200000 4.406951 2
10.300000 3.940732 1
10.500000 4.139778 1
10.900000 3.081282 3
11.100000 3.354575 1
11.900000 4.234293 5
...............
...............
# 5  
Old 12-25-2008
perl:
Code:
#! /usr/bin/perl -w
open FH,"<a.txt";
while(<FH>){
	@arr=split(" ",$_);
	if($arr[2]=~m/([0-9][0-9]*)\..*/){
		$hash{$1}->{NUM}++;
		$hash{$1}->{SUM}+=$arr[1];
	}
}
close FH;
for $key (sort keys %hash){
	printf("%s.000000 %.6f %s\n",$key,$hash{$key}->{SUM}/$hash{$key}->{NUM},$hash{$key}->{NUM});
}

awk:
Code:
awk '{
	key=substr($3,1,index($3,".")-1)
	arr[key]++
	brr[key]+=$2
}
END{
	for(i in arr)
		printf("%s.000000 %.6f %s\n",i,brr[i]/arr[i],arr[i])
}
' a.txt


Last edited by summer_cherry; 12-25-2008 at 06:17 AM..
# 6  
Old 01-02-2009
Thanks summer_cherry,

But your code does not work what I expected.

Since V2 is a counter, I just want to take the highest count of V2.
for example:

1,1,1,2,3,1,2,1,1,1 = 1,1,3,2,1,1,1 (desired output for new V2)
1,2,3,4,5,6,7,1,1,1 = 7,1,1,1
1,2,3,4,1,1,1,2,1,2 = 4,1,1,2,2

Then, I want to collect the value of V1 and V2 (with highest count) which have same t1 and t2 (e.g. 10.200000 = 10.252770182 )


Input File: Desired Output:

t1 V1 t2 V2 t1 V1 V2
10.000000 4.387413 10.139355302 1
10.100000 4.397372 10.252770182 2 ------> 10.200000 4.406951 2
10.200000 4.406951 10.398060182 1 ------> 10.300000 3.940732 1
10.300000 3.940732 10.515105302 1 ------> 10.500000 4.139778 1
10.400000 4.044359 10.645365302 1
10.500000 4.139778 10.768800182 2
10.600000 4.222087 10.929725222 3 -------> 10.900000 3.081282 3
10.700000 4.299174 11.106285302 1 -------> 11.100000 3.354575 1
10.800000 2.941378 11.216505302 1
10.900000 3.081282 11.324910182 2
11.000000 3.219284 11.626115222 3
11.100000 3.354575 11.822715302 4
11.200000 3.486347 11.968005302 5 -------> 11.900000 4.234293 5
11.300000 3.613792 12.107075222 1 -------> ............
11.400000 3.730119 12.233535302 1 -------> ............
11.500000 3.846800 12.377615222 1 -------> ............
11.600000 3.956768 12.494055302 1 -------> ............
11.700000 4.059215 12.642540182 1 -------> ............
11.800000 4.153333 12.742740182 1 -------> ............
11.900000 4.234293 12.853565222 1 -------> ............
12.000000 4.309844 13.093440182 1 -------> ............ so on...
..............
..............

I hope you can understand what I expect..

Thanks
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Calculate Average time of one column

Hello dears, I have a log file with records like below and want to get a average of one column based on the search of one specific keyword. 2015-02-07 08:15:28 10.102.51.100 10.112.55.101 "kevin.c" POST ... (2 Replies)
Discussion started by: Newman
2 Replies

2. Shell Programming and Scripting

Average of multiple time-stamped data every half hour

Hi All, Thank you for reading through my post and helping me figure out how I would be able to perform this task. For example: I have a list of continuous output collected into a file in the format as seen below: Date...........Time........C....A......... B ==========================... (5 Replies)
Discussion started by: terrychen
5 Replies

3. Programming

Resample time series data with replacement any way to do this in awk or just bash script

I have some time series data that I need to resample or downsample at some specific time intervals. The firs column is time in decimal hours. I am tryiong to resample this data every 3 minutse. So I need a data value ever 0.05. Here is the example data and as you can see, there time slot for 0.1500... (3 Replies)
Discussion started by: malandisa
3 Replies

4. Shell Programming and Scripting

Calculate average for repeated ID within a data

I have an awk script that gives the following output: Average end-to-end transmission delay 2.7 to 5.7 is 0.635392 seconds Average end-to-end transmission delay 2.1 to 5.1 is 0.66272 seconds Average end-to-end transmission delay 2.1 to 5.1 is 0.691712 seconds Average end-to-end transmission... (4 Replies)
Discussion started by: ENG_MOHD
4 Replies

5. Shell Programming and Scripting

Calculate Average AWK

I want to calculate the average line by line of some files with several lines on them, the files are identical, just want to average the 3rd columns of those files.:wall: Example file: File 1 001 0.046 0.667267 001 0.047 0.672028 001 0.048 0.656025 001 0.049 ... (2 Replies)
Discussion started by: AriasFco
2 Replies

6. Shell Programming and Scripting

AWK novice - calculate the average

Hi, I have the following data in a file for example: P1 XXXXXXX.1 YYYYYYY.1 ZZZ.1 P1 XXXXXXX.2 YYYYYYY.2 ZZZ.2 P1 XXXXXXX.3 YYYYYYY.3 ZZZ.3 P1 XXXXXXX.4 YYYYYYY.4 ZZZ.4 P1 XXXXXXX.5 YYYYYYY.5 ZZZ.5 P1 XXXXXXX.6 YYYYYYY.6 ZZZ.6 P1 XXXXXXX.7 YYYYYYY.7 ZZZ.7 P1 XXXXXXX.8 YYYYYYY.8 ZZZ.8 P2... (6 Replies)
Discussion started by: alex2005
6 Replies

7. Shell Programming and Scripting

Calculate average time using a script

Hello, I'm hoping to get some help on calculating an average time from a list of times (hour:minute:second). Here's what my list looks like right now, it will grow (I can get the full date or change the formatting of this as well): 07:55:31 09:42:00 08:09:02 09:15:23 09:27:45 09:49:26... (4 Replies)
Discussion started by: jaredhanks
4 Replies

8. UNIX for Dummies Questions & Answers

Iterate a min/max awk script over time-series temperature data

I'm trying to iterate a UNIX awk script that returns min/max temperature data for each day from a monthly weather data file (01_weath.dat). The temperature data is held in $5. The temps are reported each minute so each day contains 1440 temperature enteries. The below code has gotten me as far as... (5 Replies)
Discussion started by: jgourley
5 Replies

9. HP-UX

calculate average of multiple line data

I have a question as below and i need to write a shell or perl script for this query:My Input file looks like below RNo Marks 12 50 15 70 18 80 12 40 13 55 18 88 13 75... (4 Replies)
Discussion started by: smacherla
4 Replies

10. UNIX for Dummies Questions & Answers

Use awk to calculate average of column 3

Suppose I have 500 files in a directory and I need to Use awk to calculate average of column 3 for each of the file, how would I do that? (6 Replies)
Discussion started by: grossgermany
6 Replies
Login or Register to Ask a Question