[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Leitura de linha X
From: |
Tiago Peczenyj |
Subject: |
Re: [shell-script] Leitura de linha X |
Date: |
Mon, 5 Oct 2009 22:03:15 -0300 |
a diferença de tempo é proporcional ao numero de linhas do arquivo e o quão
longe ele está.
mas a versão com sed com um q no final tem mais performance, pois aborta o
programa depois da linha solicitada. com head + tail vc tem que gerenciar 2
processos, o que vc pode não desejar fazer por algum motivo. faltou esta
opção:
time awk 'NR==1532{print}' arquivo.log
fiz uns testes com o auth.log.0 - meu maior log no momento - e pareceu ter
tanta performance quanto head + tail.
2009/10/5 jimmy <address@hidden>
>
>
> On Mon, Oct 05, 2009 at 04:20:00PM -0300, Victor Hugo Leite wrote:
> >
> >
> > Senhores, para realizar a leitura de uma linha X sempre utilizei head +
> > tail, exemplo:
> >
> > Ler linha 48 de um arquivo:
> > head -48 arquivo | tail -1
> >
> > Ler a linha 3 da saida de um comando:
> > comando | head -3 | tail -1
> >
> > Gostaria de saber se existe alguma maneira mais elegante e rápida de
> > realizar esta tarefa.
> >
> > Aguardo retorno e desde já agradeço as respostas que sei que serão
> > encaminhadas prontamente.
> >
> > Att,
> > Victor Hugo
> >
>
> creio que a única forma de se conseguir algum ganho em relação o head +
> tail
> seria usar o sed da seguinte forma:
>
> $ sed '48!d;q' arquivo
>
> dessa forma o sed lê o arquivo e deleta todas as linhas exceto a linha
> desejada, o comando "q" faz o sed abandonar a leitura do arquivo
> imprimindo a última linha que ficou no pattern space, ou seja, justamente
> a linha 48 do exemplo, isso inclusive pode ser percebido fazendo o
> teste:
>
> $ sed '=;48!d;q' arquivo
>
> o comando "=" usado dessa forma irá imprimir o número de todas as linhas
> que estão sendo processadas.
>
> --
> "Não manejo bem as palavras
> Mas manipulo bem as strings."
> ------------------------------
>
>
--
Tiago B. Peczenyj
Linux User #405772
http://pacman.blog.br
[As partes desta mensagem que não continham texto foram removidas]