Sponsored Content
Top Forums Shell Programming and Scripting match range of different numbers by AWK Post 302351380 by repinementer on Wednesday 9th of September 2009 03:22:35 AM
Old 09-09-2009
O.k Seems to be the code is completely with perfectionism :-).I have updated and modified little bit. This script is officially over. Thanx for your kind support.

Code:
#!/usr/bin/awk -f

BEGIN {
OFS="\t"; ORS="\n" 
  def["plus_out_left_not_overlapping"]    = "ARANGE"
  def["plus_out_right_not_overlapping"]    = "BRANGE"
  def["minus_out_left_not_overlapping"]    = "CRANGE"
  def["minus_out_right_not_overlapping"]    = "DRANGE"
  def["plus_in_not_overlapping"]    = "ERANGE"
  def["minus_in_not_overlapping"]    = "FRANGE"
  def["plus_in_overlapping"]    = "GRANGE"
  def["minus_in_overlapping"]    = "HRANGE"
  def["minus_out_right_overlapping"]    = "HRANGE"
  def["plus_in_left_overlapping"]    = "GRANGE"
  def["minus_in_right_overlapping"]    = "HRANGE"   
  }

func in_range(_num, _min, _max) { 
    return _min <= _num && _num <= _max 
    }
    
NR == FNR && NF {
  NF > 2 && k = $1
  in2[k] = in2[k] ? in2[k] RS $1 FS $2 : $2 FS $3
  next
  }
$1 in in2 {
  n = split(in2[$1], tmp, RS) 
  split(tmp[1], Tmp); min = Tmp[1]
  m = split(tmp[n], Tmp); max = Tmp[m]
  # plus - minus
  Def = $2 > $3 ? "minus" : "plus"
  # inrange - outofrange
  Def = Def (in_range($2, min, max) || \
    in_range($3, min, max) ? "_in" : "_out") 
  # left - right
  if ((Def ~ /plusout/ ? $3 : $2) < min) {
    Def = Def "_left"
#    print $0 "\t" def[Def], Def
#    next
    }
  if ((Def ~ /plusout/ ? $3 : $2) > max) {
    Def = Def "_right"
#    print $0 "\t" def[Def] "\t" Def
#    next
    }    
   # overlapping-not overlapping
  for (i=1; i<=n; i++) {
    split(tmp[i], range)
    if (Def ~ /minus/) { k1 = $2; k2 = $3 }      
    else { k1 = $3; k2 = $2 }
    if (k1 >= range[1] && k2 <= range[2]) {
      Def = Def "_overlapping"
      print $0 "\t" def[Def] "\t" Def
      next
      }
    }
      Def = Def "_not_overlapping"
    print $0 "\t" def[Def] "\t" Def
        next    
}!/^[ \t]/ { print $0 "\tUNKNOWN" }


Last edited by repinementer; 09-09-2009 at 09:57 AM..
 

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 09:45 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy