AWK Match to nearest number


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting AWK Match to nearest number
# 1  
Old 04-12-2011
AWK Match to nearest number

Hello Guys,

I'm very new on here and require some help matching up and printing some columns using awk.

I have two text files. The first file has Longitude data in column 1 (lon.txt) and the second one (node.txt) has again another Longitude data in column 1 (not exact as the first one) + in the second column it has a node number.

Now I need to match the closest Longitude number from the first file to the second file and print the node number.

Please note that the files sizes are also not the same. The first files has 29,572 lines, while the second file has 1755,555 lines.

How could this be best approached?

Many thanks
Ian
# 2  
Old 04-12-2011
Hi.

Welcome to the forum. For problem sets that are not homework, school-related:
Quote:
To obtain the best answers quickly when you want help in
processing datasets -- extracting, transforming, filtering,
then:

1. Post representative samples of your data (i.e. data that
should "succeed" and data that should "fail")

2. Post what you expect the results to be, instead of trying
only to describe them.

3. Post what you have attempted to do so far.

4. Place the data within CODE tags, so that it more easily
readable.

Special cases, exceptions, etc., are very important to include
in the samples.
Best wishes ... cheers, drl
This User Gave Thanks to drl For This Post:
# 3  
Old 04-12-2011
here is a quick one...haven't tested it

Code:
ABS_DIFF=360

cat lon.txt | while read LONG_1
do
    cat node.txt | while read LINE
    do
        LONG_2=`echo $LINE | cut -f1 -d " "`
        ABS_DIFF_NEW=`expr $LONG_1 - $LONG_2 | awk '{ print ($1 >= 0) ? $1 : 0 - $1}'`
        if (($ABS_DIFF_NEW < $ABS_DIFF)); then 
                ABS_DIFF=$ABS_DIFF_NEW
                LONG=`echo $LINE | cut -f1 -d " "`
                NODE_NO=`echo $LINE | cut -f2 -d " "`
        fi
    done
    
    echo "from lon.txt - $LONG_1 , from node.txt $LONG and $NODE_NO"
done

# 4  
Old 04-13-2011
Thanks aster007,

I will put it to the test tomorrow, and will let you know how I got on.

Many thanks again :-)

Cheers,
Ian

---------- Post updated 04-13-11 at 03:33 AM ---------- Previous update was 04-12-11 at 01:09 PM ----------

Hi aster007

I tottaly missed this up!! :-(

I will try and explain again.......

I have two files lat_lon.txt and node.txt

lat_lon.txt has 1755642 lines in and in collumn 1 has lat numbers and in collumn 2 has lon numbers
eg..
Latitude Longitude 57.14824 -2.09665 57.14871 -2.09781 57.14824 -2.09665 57.14808 -2.09467 57.14843 -2.09797 57.14962 -2.09533 57.14973 -2.09474 57.14867 -2.09599
node.txt has 29648 lines in and in collumn 1 it has a node number and in collumn 2 has lat number and in collumn 3 it has a lon number
eg
1 48.39 -13 2 48.39 -12.89 3 48.39 -12.78 4 48.39 -12.67 5 48.39 -12.56 6 48.39 -12.45 7 48.39 -12.34 8 48.39 -12.23 9 48.39 -12.12 10 48.39 -12.01
Now what I need to do is to cloest match the lon and lat numbers from lon_lat.txt to the lon and lat numbers from node.txt and print the node number is a new file.

I hope this is making sense!

thanks,
# 5  
Old 04-13-2011
I'll repeat the request of our Forum Advisor drl:

Quote:
To obtain the best answers quickly when you want help in
processing datasets -- extracting, transforming, filtering,
then:

1. Post representative samples of your data (i.e. data that
should "succeed" and data that should "fail")

2. Post what you expect the results to be, instead of trying
only to describe them.

3. Post what you have attempted to do so far.

4. Place the data within CODE tags, so that it more easily
readable.

Special cases, exceptions, etc., are very important to include
in the samples.
# 6  
Old 04-13-2011
OK thanks,

I have attached sample files of the node.txt and the lat_lon.txt

I need to match the lat and lon from lat_lon.txt to the lat lon from node.txt and print the node number in a new text file.

Many thanks
Ian
# 7  
Old 04-13-2011
It's still unclear.. these are the files:

node.txt
Code:
1	48.39	-13
2	48.39	-12.89
3	48.39	-12.78
4	48.39	-12.67
5	48.39	-12.56
6	48.39	-12.45
7	48.39	-12.34
8	48.39	-12.23
9	48.39	-12.12
10	48.39	-12.01
11	48.39	-11.9
12	48.39	-11.79
13	48.39	-11.68

lat_lon.txt
Code:
57.148235	-2.096648
57.14871	-2.097806
57.148235	-2.096648
57.148084	-2.094665
57.148431	-2.097971
57.149619	-2.09533
57.149727	-2.094735
57.148667	-2.095988
57.148084	-2.094665

What should be the desired output?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Checking File record equal to multiple of 70 or nearest number to multiple of 70

Hello, I have a file with below content - Example 3 6 69 139 210 345 395 418 490 492 I would like the result as - Multiple of 70 or nearest number in the file less than the multiple of 70 69 139 (5 Replies)
Discussion started by: Mannu2525
5 Replies

2. Shell Programming and Scripting

Match and Grep the nearest value in last field

Gents I have this input file file1 (uniq records) 54503207851 170211240 54503207911 170210837 54503208111 170215105 54503208112 170215210 54655210011 170223140 54655210091 170223738 54655210172 170224355 54655210251 170224741 54655210331 170225039 54655210411 170225505 54655210492... (13 Replies)
Discussion started by: jiam912
13 Replies

3. Shell Programming and Scripting

Selecting nearest pattern match

I'm looking to match an error code against a list of possible codes and get the nearest match. The code would be a 6 character hexadecimal string. I have a file of error codes all of which have a specific first 3 characters, however, after that the last 3 characters may be specific or generic as... (3 Replies)
Discussion started by: dazedandconfuse
3 Replies

4. Shell Programming and Scripting

Match pattern and print the line number of occurence using awk

Hi, I have a simple problem but i guess stupid enough to figure it out. i have thousands rows of data. and i need to find match patterns of two columns and print the number of rows. for example: inputfile abd abp 123 abc abc 325 ndc ndc 451 mjk lkj... (3 Replies)
Discussion started by: redse171
3 Replies

5. Shell Programming and Scripting

Rounding off to the nearest floating number

I have a number, which I want to convert into the nearest floating number upto two places after the decimal point. E.g. 1.2346 will become 1.23 but 1.2356 will become 1.24 . Similarly 0.009 will be 0.01 and 0.001 will be 0.00 or 0.0 (not 0, wnat to keep the decimal... (1 Reply)
Discussion started by: hbar
1 Replies

6. UNIX for Dummies Questions & Answers

Rounding up to nearest whole number

Hi all of you, Would be great if you help me with how to round up to whole number from my input values like 2.99996,2.17890,3.00002,-2.3456,-2.7890 o/p should be like 3,2,3,-2,-3 thnks in adv!!!! regards (3 Replies)
Discussion started by: Indra2011
3 Replies

7. Shell Programming and Scripting

Question on awk for finding the column number using a match word

Hi Guys, Please help me out in my situation of writing a shell script Exampl:I have a output like asnapply 1 2 3 apply_server=1 apply_schema=ASN asnapply 1 2 3 apply_server=2 apply_schema=ASN Now i need output like asnacmd applysever=1 applyschema=ASN stop asnacmd applysever=2... (16 Replies)
Discussion started by: mallak
16 Replies

8. UNIX for Advanced & Expert Users

sed match closest/nearest pattern

All i am struggling to raplace some text in a line between two (closest) patterns , line="/home/usr/bin/:/home/usr/devuser,n1.9/bin:/home/usr/root/bin" i want to replace "devuser,n1.9" with "NEWVAL", basically all teh text from "devuser" until nearest '/' with some new text. i tried teh... (1 Reply)
Discussion started by: sudheer1984
1 Replies

9. Shell Programming and Scripting

Rounding off decimals to the nearest number in PERL

Hi Guys, I am generating a statistical report , below is the snippet of the code : Now, $nSlices stands for the time duration,meaning,the statistics will be displayed for that particular time duration. Trouble is, for certain values of $totalTime (which is the end time - start time ), i... (9 Replies)
Discussion started by: rdlover
9 Replies

10. UNIX for Dummies Questions & Answers

match nearest

Hi, I'm trying to find the nearest match between two columns of numbers, e.g. 1,1 10,8 30,50 20,100 and the search could be e.g. 20,20 returning 10,8 - i.e. 20-10 = 10 and 20-8 = 12 totalling 22, and hence being the nearest match. any ideas? thanks a lot, (1 Reply)
Discussion started by: bogu0001
1 Replies
Login or Register to Ask a Question