简体   繁体   中英

how can I make awk match up lines in file 1 with the lines in file 2 based on some number ranges in file 2

I have the following two files:

file 1:

22
2
42
32

file 2:

1 10 valuea
11 20 valueb
21 30 valuec
31 40 valued
41 50 valuee
51 60 valuef

How can I make awk grab each value from file 1, match it up with file 2 based on whether it falls between the number range in columns 1 and 2 of file 2, and then print out column 3 from the matched column in file 2? The output would resemble the following:

valuec
valuea
valuee
valued

I tried using the following AWK command (based on what I found in this post: How to check value of a column lies between values of two columns in other file and print corresponding value from column in Unix? ), but it does not seem to be working correctly.

#!/bin/bash
awk 'FNR == NR { val[$1] = $1 }
     FNR != NR { if (val[$1] >= $1 && val[$1] <= $2)
                     print $3
               }' file1 file2

Also I did not include it in here for obvious reasons, but for the actual application of this script, file 1 would include around 7,000 entries while file 2 would include 68,000 entries

alternative awk script

$ awk 'FNR == NR {a[$1]=$2; v[$1]=$3; next} 
                 {for(k in a) 
                      if(k+0<=$1 && $1+0<=a[k]) print v[k]}' file2 file1

valuec
valuea
valuee
valued

note that file2 is the first file. This will cover multiple range matches as well. +0 is to force for numerical comparison.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM