[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]