I need to comapre two files f1.txt
and f2.txt
and obtain matches, and non-matches, for this case I am looking to check Second field of f2.txt
is lying between StartRange and EndRange of f1.txt
,if yes then print first the second field of f2.txt
, then print the entire line of f1.txt
. And for no match found on f1.txt
to state "Not Found" and then print f2.txt
entire line.
f1.txt
Flag,StartRange,EndRange,Month
aa,1000,2000,cc,Jan-13
bb,2500,3000,cc,Feb-13
dd,5000,9000,cc,Mar-13
f2.txt
ss,1500
xx,500
gg,2800
yy,15000
Desired Output
ss,1500,aa,1000,2000,cc,Jan-13
xx,500,Not Found,Not Found,Not Found,Not Found
gg,2800,bb,2500,3000,cc,Feb-13
yy,15000,Not Found,Not Found,Not Found,Not Found
This might work for you:
gawk 'BEGIN {
FS="," # Field separator
c=1 # counter
while ((getline line < ARGV[1]) > 0) {
if (line !~ "Flag,StartRange,EndRange,Month") { # No need for header
F[c]=line; # store line
split(line,a,",") # split line
F2[c]=a[2] ; F3[c]=a[3] # store the lines' range parts
c++
}
}
}
FILENAME==ARGV[2] {
# Work on second file
for (i in F) { # For every line scan the first file
# if within a range, step out
if ($2>=F2[i] && $2<=F3[i]) {found=i ; break}
# else check next
else {found=0}
}
# if the above found anything print the line from second file
# with the relavant line from the first
if (found>0) {
print $0 "," F[found]
}
# otherwise the not found message
else {
print $0 ",Not Found,Not Found,Not Found,Not Found"
}
}' f1.txt f2.txt
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.