Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

Big Dave

macrumors 6502
Original poster
Nov 27, 2007
314
25
Crestview, Fl
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.
 
Last edited:
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
 
Or even more simply:
cat file | awk '($1 <= 5 && $1 >= -5) && ($2 <=5 && $2 >= -5){print $0}'
 
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.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.