Interpolation using awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Interpolation using awk
# 1  
Old 03-12-2012
Interpolation using awk

Hi all,
Consider I have a text file containing:
Code:
1003   60
1005   80
1100   110

Based on that file I need to create another file which is containing value from 1001 till 1100 which is a linear interpolation between two point (for 1004; 1006;1007 until 1109) and extrapolation based on 2 point (for 1001 and 1002; based on equation from 1003 and 1005 value)

I wonder if it could be done by using AWK script. Or if there is another solution it would be wonderful.

Thank you

Moderator's Comments:
Mod Comment Video tutorial on how to use code tags in The UNIX and Linux Forums.

Last edited by radoulov; 03-12-2012 at 07:09 AM..
# 2  
Old 03-25-2012
Hi, Try this:
Code:
awk '
{
  P[$1]=$2
  I[i++]=$1
} 
END{
  j=0; s=I[j]; t=I[j+1]
  for(i=m;i<=n;i++){
    if(I[j+2] && i>t){
      j++; s=I[j]; t=I[j+1]
    }                        
    print i,P[s]+(i-s)*(P[t]-P[s])/(t-s)
  }                                     
}
' m=1001 n=1100 infile

This User Gave Thanks to Scrutinizer For This Post:
# 3  
Old 03-25-2012
Hi.

Comment:

That seems like a small sample to interpolate from 1003 to 1100. I'm guessing that there are a few typos here, 1100 that should be 1010 or 1011 ... cheers, drl
# 4  
Old 04-04-2012
Quote:
Originally Posted by Scrutinizer
Hi, Try this:
Code:
awk '
{
  P[$1]=$2
  I[i++]=$1
} 
END{
  j=0; s=I[j]; t=I[j+1]
  for(i=m;i<=n;i++){
    if(I[j+2] && i>t){
      j++; s=I[j]; t=I[j+1]
    }                        
    print i,P[s]+(i-s)*(P[t]-P[s])/(t-s)
  }                                     
}
' m=1001 n=1100 infile

This code is working properly, thanks a lot Smilie
Now i just need to figure out the meaning of the code
It must be correlate with using array in awk, need to figure it out.
# 5  
Old 04-04-2012
Hi,

Some pointers:

array P contains the array of points, x is the index
array I contains the sequence of x coordinates

These arrays get filled while processing the file
After that is done then the standard interpolation and extrapolation (there is no real difference) is done in the print statement for all enumerated points and virtual points..
If the enumerated point is beyond a threshold then the points on the basis of which the inter/extrapolation is calculated is switched to the next set..

You could perhaps visualize this by drawing a line with the points on a piece of paper and indicate the known points and then figure out how you would calculate the inter/extrapolated value and what set of points you would use for that...

Last edited by Scrutinizer; 04-05-2012 at 01:08 AM..
This User Gave Thanks to Scrutinizer For This Post:
# 6  
Old 04-05-2012
Hi Scrutinizer, could you explain about this part
Code:
    if(I[j+2] && i>t)

i still dont get it about how I[j+2] works in the code
# 7  
Old 04-05-2012
j is used for the (known) x coordinates, i is used for all (inter/extrpolated) coordinates, the left x-coordinate is called s and the right x-coordinate is t.

so this checks to see if a shift to use the next pair of coordinates is necessary and this is the case if i>t ( which means i>I[j+1] ) unless the coordinates we then would need to shift to (from I[j] and I[j+1] to I[j+1] and I[j+2]), do not exist. This will not be the case for I[j+1], but if I[j+2] does not exist, then we have reached the end of the array I.

If this is the case (then n lies to the right of the range of coordinates) then in fact we are switching automatically from interpolation to extrapolation. The same formula is used for extrapolation as for interpolation.
This User Gave Thanks to Scrutinizer For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

An interpolation between two files

Dear all, I always appreciate your help. I am an electrical engineer. I am using a tool for timing analysis of a circuit. I would like to interpolate results from two timing reports at different voltages (0.945V and 0.78V). If voltage is decreased, data arrival time is increased. For... (4 Replies)
Discussion started by: jypark22
4 Replies

2. Shell Programming and Scripting

Interpolation of two values in two different files

Dear All, I have two files which contain numerical data and strings. I want to create a new file that only revise numerical data from two files using interpolation. I guess AWK works, but I am new on AWK. FileA.txt . . index_2("0.1, 1, 2, 4, 8, 16, 32"); values("0.0330208, 0.0345557,... (17 Replies)
Discussion started by: jypark22
17 Replies

3. Programming

Find gaps in time data and replace missing time value and column 2 value by interpolation in awk

Dear all, I am kindly seeking assistance on the following issue. I am working with data that is sampled every 0.05 hours (that is 3 minutes intervals) here is a sample data from the file 5.00000 15.5030 5.05000 15.6680 5.10000 16.0100 5.15000 16.3450 5.20000 16.7120 5.25000... (4 Replies)
Discussion started by: malandisa
4 Replies

4. Shell Programming and Scripting

XY interpolation by time in awk

Hi I am a newbie in awk scripting. I'm working with a file with xy coordinates that were acquired with a time stamp. All the time stamps were recorded but not the XY coordinates. Let see an example: FFID X Y UNIX TIME TIMEGAP... (8 Replies)
Discussion started by: Joćo Noiva
8 Replies

5. UNIX for Dummies Questions & Answers

Interpolation if there is no exact match for value

Dear all, could you help me with following question. There are two datasets (below). I need to find match between BP values from data1 and data2, and add corresponding CM value from data2 into data1. if there is not exact match, the corresponding CM value should be calculated using interpolation.... (20 Replies)
Discussion started by: kush
20 Replies

6. Shell Programming and Scripting

Expand & Interpolation

Dear All, I have input like this, infile: 10 464310.16 20 464309.44 30 464309.02 40 464316.93 ... ... Desired output per step: out_step01: 10 464310.16 11 12 13 14 (9 Replies)
Discussion started by: attila
9 Replies

7. Shell Programming and Scripting

Hi ! whether it is possible to do interpolation in scripting...

Hi ! Experts... I just wanted to know whether it is possible in scripting...to do interpolation.... if so....have a look on my data file I need temperature and salinity value with a bin size of 0.5 m output looks somewhat like this dep temp sal 0.5 25 0.077 1 25 ... (12 Replies)
Discussion started by: nex_asp
12 Replies

8. Shell Programming and Scripting

Variable interpolation in "print" of awk command

Hi, I have a snippet like below. Based on variable i, i wish to print 1,2,3,4,5th columns to Sample files. For each loop, one column from contetn and results will be pused to sample files. But i have a problem here i=1 while ; do `awk -F"\t" '{print $($i)}' $content > Sample_${i}_original`;... (4 Replies)
Discussion started by: forums123456
4 Replies

9. Web Development

JavaScript variable interpolation

Hi everybody, Firstly, this would be the first time I'm using JavaScript. My background is mainly Perl. Nevertheless, here's my problem. So I've created a function function linkout(url){ setTimeout("window.open(url)",5000) //in milliseconds } However because the variable "url" is... (0 Replies)
Discussion started by: z1dane
0 Replies

10. UNIX for Dummies Questions & Answers

variable interpolation

I've become obsessed with trying to get this to work. As of yet, I am unable to figure it out. Unfortunately, I don't have Linux or UNIX available when I get home. Anyone have tips for me on how I can pass param1 to ID via use of COUNTER and loop? thx. LIMIT=6 param1="999999999" export... (0 Replies)
Discussion started by: egkumpe
0 Replies
Login or Register to Ask a Question