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

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

Re: [shell-script] Criação de arquivo


From: Paulo Bettega
Subject: Re: [shell-script] Criação de arquivo
Date: Thu, 20 Mar 2014 15:09:11 -0300
User-agent: Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Thunderbird/24.3.0

Olá Júlio, seguem os tempos dos sed, usei um arquivo maior como entrada.

big-file com 2059 linhas
"Conta";"Data_Mov";"Nr_Doc";"Historico";"Valor";"Deb_Cred" # linha 1
"3333222111111111";"20130101";"000000";"REM BASICA";"0.00";"C" # linha 2 (e 
mais 2057 iguais)

> 1 - Executando somente um cmd sed:
time sed  -r 's/"[0-9]+";"([0-9]+)";"([0-9]+).*/sinc_t \1 U \2 U/' < big-file

real    0m0.312s
user    0m0.102s
sys     0m0.017s


> 2 - Executando 3 sed para ER simples:
time sed  's/"[0-9]*";"/sinc_t /;s/";"/ U /;s/".*/ U/' < big-file

real    0m0.122s
user    0m0.033s
sys     0m0.013s


> 3 - Executando 3 sed para ERs expandidas:
time sed  -r 's/"[0-9]+";"/sinc_t /;s/";"/ U /;s/".*/ U/' < big-file
sinc_t 20130101 U 000000 U

real    0m0.110s
user    0m0.030s
sys     0m0.012s


Parece que é vantagem separar o sed em vários comandos, e a ER simples ou
expandida não parece fazer diferença, pelo menos nesse caso.

Mas o awk ainda é mais rápido.

time awk 'BEGIN {FS=";"}{print "sinc_t "$1" U "$2" U"}' big-file

real 0m0.103s
user 0m0.015s
sys 0m0.012s


O sed e awk são realmente rápidos, mas eu cometi um erro na medição do
tempo no loop com while, usei sub-shells que atrasam muito o loop.


Abraços Paulo Bettega



On 20-03-2014 11:45, Julio C. Neves wrote:
Fala Paulo,
a solução que mandei na proposta anterior estava furada, pq não percebi que 
tinham aspas envolvendo
cada campo. Te peço o favor de comparar os tempos do awk e das 3 soluções sed 
que coloquei abaixo.

1 - Executando somente um cmd sed:
$ sed  -r 's/"[0-9]+";"([0-9]+)";"([0-9]+).*/sinc_t \1 U \2 U/' <<<
'"3333222111111111";"20130101";"000000";"REM BASICA";"0.00";"C"'

2 - Executando 3 sed para ER simples:
$ sed  's/"[0-9]*";"/sinc_t /;s/";"/ U /;s/".*/ U/' <<< 
'"3333222111111111";"20130101";"000000";"REM
BASICA";"0.00";"C"'

3 - Executando 3 sed para ERs expandidas:
$ sed  -r 's/"[0-9]+";"/sinc_t /;s/";"/ U /;s/".*/ U/' <<<
'"3333222111111111";"20130101";"000000";"REM BASICA";"0.00";"C"'

Abcs,
Julio
*@juliobash*



reply via email to

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