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
313
23
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:

lee1210

macrumors 68040
Jan 10, 2005
3,182
3
Dallas, TX
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
 

willieva

macrumors 6502
Mar 12, 2010
274
0
Or even more simply:
cat file | awk '($1 <= 5 && $1 >= -5) && ($2 <=5 && $2 >= -5){print $0}'
 

lee1210

macrumors 68040
Jan 10, 2005
3,182
3
Dallas, TX
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.