LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   bash: using grep to filter 25 or above (https://www.linuxquestions.org/questions/programming-9/bash-using-grep-to-filter-25-or-above-848167/)

schneidz 12-03-2010 10:10 AM

bash: using grep to filter 25 or above
 
hi, i have a sample that looks like this:
Code:

[schneidz@hyper temp]$ wget -q --output-document=- http://world.needforspeed.com/SpeedAPI/ws/game/nfs-w/leaderboards/events
<?xml version="1.0" encoding="UTF-8"?>
<list>
  <worldLeaderboardEvent eventId="299" eventName="AGOSTINI AVENUE" eventModeId="9" eventModeName="SPRINT" laps="0" length="7.0392961502075195" minEntrants="2" maxEntrants="8" minLevel="26" maxLevel="50" minTier="1" maxTier="4"/>
  <worldLeaderboardEvent eventId="10" eventName="BAY BRIDGE" eventModeId="4" eventModeName="CIRCUIT" laps="2" length="16.0" minEntrants="2" maxEntrants="8" minLevel="21" maxLevel="50" minTier="1" maxTier="4"/>
  <worldLeaderboardEvent eventId="298" eventName="BEACH &amp; CHANCELLOR" eventModeId="4" eventModeName="CIRCUIT" laps="2" length="8.212015151977539" minEntrants="2" maxEntrants="8" minLevel="25" maxLevel="50" minTier="1" maxTier="4"/>
  <worldLeaderboardEvent eventId="302" eventName="BEACHFRONT" eventModeId="4" eventModeName="CIRCUIT" laps="2" length="8.139071464538574" minEntrants="2" maxEntrants="8" minLevel="30" maxLevel="50" minTier="1" maxTier="4"/>
  <worldLeaderboardEvent eventId="25" eventName="BEACON &amp; STATION" eventModeId="9" eventModeName="SPRINT" laps="0" length="5.52960205078125" minEntrants="2" maxEntrants="8" minLevel="25" maxLevel="50" minTier="1" maxTier="1"/>
  <worldLeaderboardEvent eventId="71" eventName="BLACKWELL BRIDGE" eventModeId="9" eventModeName="SPRINT" laps="0" length="7.214239120483398" minEntrants="2" maxEntrants="8" minLevel="38" maxLevel="50" minTier="1" maxTier="4"/>
  <worldLeaderboardEvent eventId="22" eventName="BOUNDARY &amp; MARINA" eventModeId="9" eventModeName="SPRINT" laps="0" length="8.0" minEntrants="2" maxEntrants="8" minLevel="36" maxLevel="50" minTier="1" maxTier="4"/>
  <worldLeaderboardEvent eventId="26" eventName="BRISTOL &amp; BAYSHORE" eventModeId="9" eventModeName="SPRINT" laps="0" length="6.0" minEntrants="2" maxEntrants="8" minLevel="42" maxLevel="50" minTier="1" maxTier="4"/>
  <worldLeaderboardEvent eventId="3" eventName="BRISTOL &amp; DIAMOND" eventModeId="9" eventModeName="SPRINT" laps="0" length="5.0" minEntrants="2" maxEntrants="8" minLevel="20" maxLevel="50" minTier="1" maxTier="4"/>
  <worldLeaderboardEvent eventId="57" eventName="BROOKS STREET" eventModeId="4" eventModeName="CIRCUIT" laps="2" length="11.753680229187012" minEntrants="2" maxEntrants="8" minLevel="29" maxLevel="50" minTier="1" maxTier="4"/>
...

if i do this, i get just the level 25 ones:
Code:

[schneidz@hyper temp]$ wget -q --output-document=- http://world.needforspeed.com/SpeedAPI/ws/game/nfs-w/leaderboards/events | grep minLevel=\"25\"
  <worldLeaderboardEvent eventId="298" eventName="BEACH &amp; CHANCELLOR" eventModeId="4" eventModeName="CIRCUIT" laps="2" length="8.212015151977539" minEntrants="2" maxEntrants="8" minLevel="25" maxLevel="50" minTier="1" maxTier="4"/>
  <worldLeaderboardEvent eventId="25" eventName="BEACON &amp; STATION" eventModeId="9" eventModeName="SPRINT" laps="0" length="5.52960205078125" minEntrants="2" maxEntrants="8" minLevel="25" maxLevel="50" minTier="1" maxTier="1"/>
  <worldLeaderboardEvent eventId="146" eventName="LYONS &amp; HWY 201" eventModeId="9" eventModeName="SPRINT" laps="0" length="99.0" minEntrants="2" maxEntrants="8" minLevel="25" maxLevel="50" minTier="1" maxTier="4"/>

how do i get it to return everything above 25 (at least everything between [25 and 99]) ?

thanks,

colucix 12-03-2010 10:24 AM

Code:

grep -E 'minLevel="2[5-9]"|minLevel="[3-9][0-9]"'
matches minlevel from 25 to 29 or minlevel from 30 to 99.
Code:

grep -E 'minLevel="2[5-9]"|minLevel="[3-9][0-9]"|minLevel="[0-9]{3,}"'
extends up to infinity!

grail 12-04-2010 02:33 AM

You could also try something like awk:
Code:

awk '/minLevel/{split($(NF-3),arr,"\"")}arr[2] > 25'


All times are GMT -5. The time now is 03:19 PM.