shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] grep faz isso?


From: Eliphas Levy Theodoro
Subject: Re: [shell-script] grep faz isso?
Date: Thu, 9 Dec 2004 14:56:46 -0200 (BRST)

rcbarioni, @ 01:30:

> tenho um arquivo com uma lista de números:
>
> 003
> 820
> 244
> 413
> 158
> 962
> 016 etc...
>
> como fazer para selecionar as linhas dentro de um range qualquer?
> Ex: linhas com numeros entre 200 e 500.
>
> da pre fazer com grep?

Até dá, mas vc vai ter que mexer com regex e dependendo dos números
que vc for pegar, vai ficar complicado ;)

grep "^[2-5][0-9][0-9]$" arquivo

Ugh, que coisa. Se mudar pra pegar, por exemplo, entre os números 625 e 
711, a coisa pega feio. Heh.

grep "^\(62[5-9]\)\|\(6[3-9][0-9]\)\|\(70[0-9]\)\(71[0-1]\)$"

Ou seja, expressões regulares não são a bala de prata da praticidade 
nesse caso. Vamos ver as opções:


O Julio mandou duas em sed:

> $ sort -n arquivo | sed -n '/016/,/413/p'
> $ sort -n arquivo | sed '/016/,/413/!d'

Essa vai funcionar rapidinho, *desde que* o primeiro e o segundo número 
existam na sua listagem. Se um dos dois não existirem, não funciona.


O Rodrigo mandou uma em shell puro:

> cat arquivo | while read line; do
>     [ $line -lt 500 ] && [ $line -gt 200 ] && echo $line
> done

Essa tá perfeita.


Agora a minha vez, em awk (que eu particularmente não gosto, mas gosto
da política "use a ferramenta que você acha que é a melhor para o
serviço"):

awk '{ if ( $1 >= 200 && $1 <= 500 ) print; }' arquivo


Cheers,
-- 
Eliphas

[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]