match range of different numbers by AWK


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting match range of different numbers by AWK
# 22  
Old 07-24-2009
Hey DUDE

Thank you very much for your great scriptsSmilie

I did the exercise. The book u referred is really really good. Now on my own created couple of super scripts Smilie but compare to yours nothing.

But I will try to learn GAWK book asap.

I think I have consumed your valuble time alot by posting impromptu queriesSmilie. My apologies for that.

I have a problem regarding my LOGIC file that I posted earlier. Could you please take a look at new LOGICfile.

I have done some additions. Its almost same as the previous one but with new types of ranges. (Illustrated in XLS file attachment)

The mistake I did was only taking the first range. I need to consider all the ranges.

I think it's asking a lot. .Smilie

But really help would be appreciatedSmilie
# 23  
Old 07-27-2009
Edited

I have a made a small correction in the second script you made (sec = $2) as per my need. Every thing working fine but it printing 2 times if the flag is "-" and working fine with "+"

Could you help me to find the error tht printing twice the result

Thanx

Code:
  awk '{
  sec = $2; fifth = split($5, _fifth, ","); sixth = split($6, _sixth, ",")
  counter = 0; key = $1; flag = $4; sub(/[^ \t*]*/, "")
  dummy = sprintf("%*s", length(key),x)
  for (i=1; i<=sixth; i++) {
    second_third = sec + _sixth[i] FS _fifth[i] + sec + _sixth[i]
    third_second = _fifth[i] + sec + _sixth[i] FS sec + _sixth[i] 
    if (flag == "+") 
      rec = rec ? rec RS dummy OFS second_third : key OFS second_third OFS $0
    else  
      rec_rev = rec_rev ? \
        (++counter == sixth - 1 ? key OFS third_second OFS $0 : dummy OFS third_second ) RS rec_rev : \
        dummy OFS third_second
    }
  print (flag == "+" ? rec : rec_rev)    
 }' OFS='\t' ORS='\n\n' r1.txt

input
Code:
chr1    61223    1201233    -    5,10,15,10,20    0,25,40,75,95
chr1    61223    1201233    +   5,10,15,10,20    0,25,40,75,95

ouput

Code:
chr1    61338 61318        61223    1201233    -    5,10,15,10,20    0,25,40,75,95
        61308 61298
        61278 61263
        61258 61248
        61228 61223

chr1    61338 61318        61223    1201233    -    5,10,15,10,20    0,25,40,75,95
        61308 61298
        61278 61263
        61258 61248
        61228 61223
chr1    61223 61228        61223    1201233    +    5,10,15,10,20    0,25,40,75,95
        61248 61258
        61263 61278
        61298 61308
        61318 61338

# 24  
Old 07-27-2009
Most likely you have blank lines in your input file. Use this code:

Code:
awk 'NF {
  sec = $2; fifth = split($5, _fifth, ","); sixth = split($6, _sixth, ",")
  counter = 0; key = $1; flag = $4; sub(/[^ \t*]*/, "")
  dummy = sprintf("%*s", length(key),x)
  for (i=1; i<=sixth; i++) {
    second_third = sec + _sixth[i] FS _fifth[i] + sec + _sixth[i]
    third_second = _fifth[i] + sec + _sixth[i] FS sec + _sixth[i] 
    if (flag == "+") 
      rec = rec ? rec RS dummy OFS second_third : key OFS second_third OFS $0
    else  
      rec_rev = rec_rev ? \
        (++counter == sixth - 1 ? key OFS third_second OFS $0 : dummy OFS third_second ) RS rec_rev : \
        dummy OFS third_second
    }
  print (flag == "+" ? rec : rec_rev)    
 }' OFS='\t' ORS='\n\n' r1.txt

# 25  
Old 07-27-2009
Thanx

Thanx Rado
Working fine now

---------- Post updated at 02:13 AM ---------- Previous update was at 01:26 AM ----------

Is it possible to modify the script for the problem I have posted earlier (copy of Logic file, 2nd one)

Please if your busy leave it to me. I will try my best
# 26  
Old 07-27-2009
Quote:
Originally Posted by repinementer

Is it possible to modify the script for the problem I have posted earlier (copy of Logic file, 2nd one)

Please if your busy leave it to me. I will try my best
Try to solve the problem yourself. You should verify your requirements: in your last xls file you indicate different definitions for the same ranges ...
# 27  
Old 07-28-2009
Yes I did. But I did it on purpose. But you are right I should give the same names to same type of ranges. Anyways.I 'm reading arrays in awk now. The book is really helping me alot.

Could you please explain the code you have written before for the Logic. So that I could understand and re write and modify it according to my usage.
# 28  
Old 07-30-2009
hI

I have gone through your code.
I have understood how you differentiated and assigned "desc", "asc", "in", "out", "lower", "upper", "exact", "inexact" of input 1 first range value and how you set maximum and minimum values for input2.
As I already told you I'm trying to modify it based on 2 editions.
Edition1. ) Instead of comparing input 1 first range value I would like to compare input 1 all range values based on their specific keys.


I assume you assigned the first range value of input1 as k1 and so on
If I want to assign all the ranges Do I have to remove the k1 and k2

Code:
# exact - not exact
  for (i=1; i<=n; i++) {
    split(tmp[i], range)
    if (Def ~ /asc/) { k1 = $2; k2 = $3 }      
    else { k1 = $3; k2 = $2 }
    if (k1 >= range[1] && k2 <= range[2]) {
      Def = Def "exact"
      print $0 "\t\t" def[Def]
      next
      }
    }
      Def = Def "notexact"
    print $0 "\t\t" def[Def]
    next

Edition2. ) If any range value of input 1 of their specific key overlaps with any range value of input 2 it comes under G and H RANGES (Highlited in green boxes) based on the ""lower"" or """upper""

No need any change
Quote:
A RANGE - ascoutlower
B RANGE - ascoutupper
C RANGE - descoutlower
D RANGE - descoutupper
E RANGE - ascinnotexact
F RANGE - descinnotexact
need change
Quote:
G RANGE - If any range value of input 1 overlaps with any range of input2 it comes under G
H RANGE - Vice versa
Note : I have renamed the ranges in the new file last copy.xls

Could you please help me with this

Last edited by repinementer; 07-30-2009 at 01:51 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. 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

2. 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

3. 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

4. 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

5. 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

6. 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

7. 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

8. 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

9. 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

10. 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
Login or Register to Ask a Question