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

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

Re: [shell-script] Filtrar linhas no arquivo texto


From: Rafael Dutra
Subject: Re: [shell-script] Filtrar linhas no arquivo texto
Date: Tue, 17 Jul 2007 14:07:48 -0300
User-agent: Thunderbird 2.0.0.0 (X11/20070326)

Fiquei curioso com o desempenho do meu note em relação a este arquivo de 2 milhoes de linhas.

Entao criei o arquivo com exatas 2 milhoes de linhas segui os mesmos comandos do nosso amigo abaixo e obtive o seguinte resultado com um note hp 2137, 1gb ram ddr2 e processador core duo 1.66 Ghz

time cut -d '_' -f 2 teste | cut -d '.' -f 1 > /dev/null

real    0m0.633s
user    0m0.920s
sys     0m0.124s

time sed 's/documento_//;s/.odt//' teste > /dev/null

real    0m5.108s
user    0m5.064s
sys     0m0.032s

time awk -F '[_.]' '{print $2}' teste > /dev/null

real    0m4.636s
user    0m4.584s
sys     0m0.048s

Muito bonito hehe.


Eduardo Costa escreveu:


Realizei os mesmos testes em HP-UX com 4 processadores. Não mudou muito em
relação ao P4, a unica mudança real é que o awk foi mais lento que o sed.
Mas as versoes daqui são muito antigas Hp-Ux 11.11. Lembrando de novo que
não é Linux. Mas mesmo assim dá pra perceber a vantagem do comando cut em
relação aos outros dois. (O arquivo usado tinha um pouco mais de 2 milhões
de linhas)

[]~(56): time cut -d '_' -f 2 arquivo | cut -d '.' -f 1 > /dev/null
1.54u 0.07s 0:01.62 99.3%

[]~(57): time sed 's/documento_//;s/.odt//' arquivo > /dev/null
5.22u 0.42s 0:05.65 99.8%

[]~(58): time awk -F '[_.]' '{print $2}' arquivo > /dev/null
6.88u 0.07s 0:06.98 99.5%

Abraços,

Eduardo

On 7/14/07, Sergio Nery Simoes <address@hidden <mailto:sergionery%40gmail.com>> wrote:
 >
 > Pessoal,
 >
 > apenas por curiosidade sobre o desempenho, fiz uma comparação de tempo
 > entre
 > as soluções propostas, com o sed, o cut e o awk.
 > A apesar da minha grande preferência pelo awk, após os resultados vou
 > rever
 > meus conceitos sobre o cut (rs).
 > Os testes foram feitos com um arquivo de dois milhões de linhas em um P4
 > 2.2GHz.
 > Em todos foi feito o redirecionamento para /dev/null e por isso não
 > utilizei
 > a opção -i do sed.
 >
 > Observem:
 >
 > $ wc -l arq
 > 2000000 arq
 >
 > $ time sed 's/documento_//;s/.odt//' arq > /dev/null
 > real 0m14.492s
 > user 0m13.805s
 > sys 0m0.076s
 >
 > $ time awk -F '[_.]' '{print $2}' arq > /dev/null
 > real 0m2.112s
 > user 0m2.020s
 > sys 0m0.044s
 >
 > $ time cut -d '_' -f 2 arq | cut -d '.' -f 1 > /dev/null
 > real 0m0.944s
 > user 0m0.812s
 > sys 0m0.104s
 >
> reparem que o sed teve o pior desempenho ~14s, o awk não foi o melhor mais > teve um excelente resultado ~2s, sendo o cut o mais rápido ~1s, duas vezes
 > mais rápido que o awk e 14 vezes mais rapido que o sed.
 >
> O fato de alguns comando serem mais sofisticados (eg: processar ERs, etc),
 > podem torná-los mais lentos ao utilizarmos para operações simples.
 >
 > Conclusão: se quisermos obter desempenho, devemos utilizar comandos mais
 > simples sempre que possível.
 >
 > Att,
 > Sergio.
 >
> Em 06/07/07, Tiago Barcellos Peczenyj <address@hidden <mailto:tiago.peczenyj%40gmail.com><tiago.peczenyj%40gmail.com>>
 > escreveu:
 > >
 > > Bom, existem muitas formas:
 > >
 > > awk -F '[_.]' '{print $2}' arquivo
 > >
 > > ou
 > >
 > > cut -d '_' -f 2 arquivo | cut -d '.' -f 1
 > >
 > > []s Tiago
 > >
> > On 7/6/07, Eduardo Lucas <address@hidden <mailto:eduardo.lucas%40orbisat.com.br><eduardo.lucas%40orbisat.com.br>
 > <eduardo.lucas%40orbisat.com.br>>
 > > wrote:
 > > >
 > > > Pessoal...
 > > > estou como as seguintes linhas do arquivo
 > > >
 > > > documento_0012526A.odt
 > > > documento_0035555A.odt
 > > > documento_0054443A.odt
 > > > documento_0022222A.odt
 > > > documento_0034344A.odt
 > > > documento_0055555A.odt
 > > >
 > > > preciso da saida em um arquivo dele assim dele assim:
 > > >
 > > > 0012526A
 > > > 0035555A
 > > > 0054443A
 > > > 0022222A
 > > > 0034344A
 > > > 0055555A
 > > >
 > > > como faço isto...
 > > > desde já grato
 > > >
 > > > Eduardo
 > > >
 > > >
 > >
 > > --
 > > Tiago B Peczenyj
 > > Linux User #405772
 > >
 > > http://peczenyj.blogspot.com/ <http://peczenyj.blogspot.com/>
 > >
 > > [As partes desta mensagem que não continham texto foram removidas]
 > >
 > >
 > >
 >
 > [As partes desta mensagem que não continham texto foram removidas]
 >
 >
 >

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



--
+---------------------------------------------+
             Rafael Dutra
        address@hidden
          Linux user #376.904
  Heavy Metal e Slackware GNU/Linux \,,/

     "Ubuntu" -- an African word,
 meaning "Slackware is too hard for me". :-)

:wq
+---------------------------------------------+


reply via email to

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