Sponsored Content
Top Forums Shell Programming and Scripting match range of different numbers by AWK Post 302336841 by rakeshawasthi on Thursday 23rd of July 2009 02:02:41 AM
Old 07-23-2009
With unclear requirement and mistakes in the expected out it was difficult to write a program. There was no program was also provided so i had to write from scratch.

Try:
Code:
re_arrange_file ()
{
infile=$1
out_file=$infile"x"
>$out_file
while read line
do
        set $line
        if [ $# -eq 3 ]; then
                key=$1
                subkey=$2
                min_range=$(echo $3 | cut -d"-" -f1)
                max_range=$(echo $3 | cut -d"-" -f2)
        else
                min_range=$(echo $1 | cut -d"-" -f1)
                max_range=$(echo $1 | cut -d"-" -f2)
        fi
        if [[ $min_range -gt $max_range ]]; then
           (( min_range = $max_range + $min_range))
                (( max_range = $min_range - $max_range))
                (( min_range = $min_range - $max_range))
        fi

        echo $key $subkey $min_range $max_range >> $out_file
done < $infile
}

re_arrange_file input1
re_arrange_file input2
>out_file
in_range_count=0
out_range_count=0
file2_lin_no=0
while read line
do
   set $line
   key=$1
   subkey=$2
   min_range=$3
   max_range=$4

        found=0
        ((file2_lin_no = $file2_lin_no + 1))
        file2_lin=`head -$file2_lin_no input2 | tail -1`
        cat input1x | grep "$key" | grep "$subkey" > tmp
        while read _key _subkey _min _max
        do
                if [[ ${_min} -le $min_range && ${_max} -ge $max_range ]]; then
                        ((in_range_count = $in_range_count + 1))
                        echo $file2_lin "inrange"$in_range_count
                        found=1
                        break
                fi
        done < tmp
        if [[ $found -eq 0 ]]; then
                ((out_range_count = $out_range_count + 1))
                echo $file2_lin outofrange"$out_range_count"
        fi
done < input2x



---------- Post updated at 11:32 AM ---------- Previous update was at 11:30 AM ----------

Output:
Code:
a a1 1-4 outofrange1
a a1 4-1 outofrange2
a a1 120-140 outofrange3
a a1 140-120 outofrange4
a a1 65-69 outofrange5
70-100 outofrange6
a a1 70-65 outofrange7
44-40 outofrange8
a a1 6-7 inrange1
37-57 outofrange9
63-83 outofrange10
a a1 7-8 inrange2

This is not exactly what is provided in question. But I think in question it is wrong, as many lines do not have either inrange or outofrange itself.
a a1 65-69 should be outofrange but was provided otherwise.
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

match numbers (awk)

i would like to enter (user input) a bunch of numbers seperated by space: 10 15 20 25 and use awk to print out any lines in a file that have matching numbers so output is: 22 44 66 55 (10) 77 (20) (numbers 10 and 20 matched for example) is this possible in awk . im using gawk for... (5 Replies)
Discussion started by: tanku
5 Replies

2. Shell Programming and Scripting

Match real numbers in AWK

I am looking for a better way to match real numbers within a specified tolerance range. My current code is as follows: if ($1 !~ /^CASE/) for(i=1;i in G;i++) if (G >= $5-1 && G <= $5+1) { print $1,$4,$5,J,G } else { print $1,"NO MATCH" } where $5 and G are... (3 Replies)
Discussion started by: cold_Que
3 Replies

3. Shell Programming and Scripting

awk to match a numeric range specified by two columns

Hi Everyone, Here's a snippet of my data: File 1 = testRef2: A1BG - 13208 13284 AAA1 - 34758475 34873943 AAAS - 53701240 53715412File 2 = 42MLN.3.bedS2: 13208 13208 13360 13363 13484 13518 13518My awk script: awk 'NR == FNR{a=$1;next} {$1>=a}{$1<=a}{print... (5 Replies)
Discussion started by: heecha
5 Replies

4. Shell Programming and Scripting

Range of numbers in HEX using AWK

Hi , How do i found out all the number in a range ( HEX) for example Input is 15CF:15D2 Output needed 15CF 15D0 15D1 15D2 Thanks (2 Replies)
Discussion started by: greycells
2 Replies

5. Shell Programming and Scripting

Awk numeric range match only one digit?

Hello, I have a text file with lines that look like this: 1974 12 27 -0.72743 -1.0169 2 1.25029 1974 12 28 -0.4958 -0.72926 2 0.881839 1974 12 29 -0.26331 -0.53426 2 0.595623 1974 12 30 7.71432E-02 -0.71887 3 0.723001 1974 12 31 0.187789 -1.07114 3 1.08748 1975 1 1 0.349933 -1.02217... (2 Replies)
Discussion started by: meridionaljet
2 Replies

6. Shell Programming and Scripting

Complex match of numbers between 2 files awk script

Hello to all, I hope some awk guru could help me. I have 2 input files: File1: Is the complete database File2: Contains some numbers which I want to compare File1: "NUMBERKEY","SERVICENAME","PARAMETERNAME","PARAMETERVALUE","ALTERNATENUMBERKEY"... (9 Replies)
Discussion started by: Ophiuchus
9 Replies

7. Shell Programming and Scripting

awk : match only the pattern string , not letters or numbers after that.

Hi Experts, I am finding difficulty to get exact match: file OPERATING_SYSTEM=HP-UX LOOPBACK_ADDRESS=127.0.0.1 INTERFACE_NAME="lan3" IP_ADDRESS="10.53.52.241" SUBNET_MASK="255.255.255.192" BROADCAST_ADDRESS="" INTERFACE_STATE="" DHCP_ENABLE=0 INTERFACE_NAME="lan3:1"... (6 Replies)
Discussion started by: rveri
6 Replies

8. Shell Programming and Scripting

Match on a range of numbers

Hi, I'm trying to match a filename that could be called anything from vout001 to vout252 and was trying to do a small test but I'm not getting the result I thought I would.. Can some one tell me what I'm doing wrong? *****@********>echo $mynumber ... (4 Replies)
Discussion started by: Jazmania
4 Replies

9. Shell Programming and Scripting

Get range out using sed or awk, only if given pattern match

Input: START OS:: UNIX Release: xxx Version: xxx END START OS:: LINUX Release: xxx Version: xxx END START OS:: Windows Release: xxx Version: xxx ENDHere i am trying to get all the information between START and END, only if i could match OS Type. I can get all the data between the... (3 Replies)
Discussion started by: Dharmaraja
3 Replies

10. Shell Programming and Scripting

awk to print text in field if match and range is met

In the awk below I am trying to match the value in $4 of file1 with the split value from $4 in file2. I store the value of $4 in file1 in A and the split value (using the _ for the split) in array. I then strore the value in $2 as min, the value in $3 as max, and the value in $1 as chr. If A is... (6 Replies)
Discussion started by: cmccabe
6 Replies
GRIB_GET(1)							   User Commands						       GRIB_GET(1)

NAME
grib_get - Get values of some keys from a grib file. DESCRIPTION
Get values of some keys from a grib file. It is similar to grib_ls, but fails returning an error code when an error occurs (e.g. key not found). USAGE
grib_get [options] grib_file grib_file ... OPTIONS
-f Force. Force the execution not to fail on error. -p key[:{s/d/l}],key[:{s/d/l}],... Declaration of keys to print. For each key a string (key:s) or a double (key:d) or a long (key:l) type can be requested. Default type is string. -P key[:{s/d/l}],key[:{s/d/l}],... As -p adding the declared keys to the default list. -w key[:{s/d/l}]{=/!=}value,key[:{s/d/l}]{=/!=}value,... Where clause. Grib messages are processed only if they match all the key/value constraints. A valid constraint is of type key=value or key!=value. For each key a string (key:s) or a double (key:d) or a long (key:l) type can be specified. Default type is string. -V Version. -W width Minimum width of each column in output. Default is 10. -M Multi-grib support off. Turn off support for multiple fields in single grib message -G GRIBEX compatibility mode. -7 Does not fail when the message has wrong length AUTHOR
This manpage has been autogenerated by Enrico Zini <enrico@debian.org>from the command line help of grib_get. grib_get April 2009 GRIB_GET(1)
All times are GMT -4. The time now is 08:12 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy