grep syntax help

Discussion in 'Mac Programming' started by Big Dave, Jan 23, 2013.

  1. Big Dave, Jan 23, 2013
    Last edited: Jan 23, 2013

    macrumors 6502

    Joined:
    Nov 27, 2007
    Location:
    Crestview, Fl
    #1
    Let's say I have a file that contains ordered pairs of data.
    Example..
    -10 -10
    -10 -9
    ...
    10 9
    10 10

    If I want to grep out a portion of this file, say from -5 -5 to 5 5, I would use grep but I am returning extra data such as -5 6 which is outside of my search. Here is the code I have but I could use some help with my grep term.

    Code:
    #!/bin/bash
    for ((x=-5; x<=5; x++))
      do
       for ((y=-5; y<=5; y++))
         do
          grep -- "$x $y" file
         done
      done
    Has anyone seen a problem like this before?
    Thanks.
     
  2. macrumors 68040

    lee1210

    Joined:
    Jan 10, 2005
    Location:
    Dallas, TX
    #2
    If I wanted to do this, I'd probably try awk. Just have a rangeStarted that starts false, and for each line see if you're looking at the starting value. If so, set hasStarted to true and print. Once you've found the end you can set rangeStarted back to false or just use exit to quit.

    -Lee
     
  3. macrumors 6502

    Joined:
    Mar 12, 2010
    #3
    Or even more simply:
    cat file | awk '($1 <= 5 && $1 >= -5) && ($2 <=5 && $2 >= -5){print $0}'
     
  4. thread starter macrumors 6502

    Joined:
    Nov 27, 2007
    Location:
    Crestview, Fl
    #4
    This works really well. Thank you for your help!
     
  5. macrumors 68040

    lee1210

    Joined:
    Jan 10, 2005
    Location:
    Dallas, TX
    #5
    Unfortunately, the logic is more complex. If $1 is between -4 and 4, print. If $1 is -5 and $2 is >= -5, print. If $1 is 5 and $2 is <= 5, print. Doing it based on a range seemed like less code.

    -Lee

    Edit: The OP said it worked... So good news. I'd expect you wouldn't get -4 8, 3 10, etc. but maybe I'm misreading.
     

Share This Page