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

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

Re: [shell-script] Inserir quebra de l inha a cada N repetições de um pa


From: Rodrigo Tenorio
Subject: Re: [shell-script] Inserir quebra de l inha a cada N repetições de um padrão.
Date: Fri, 29 Jan 2016 02:21:05 +0000

Kkkkkkk
É tão difícil que fiquei até com vergonha de não saber...

Direto ao ponto:
SED puro:
time sed -r "s/[^\(]*(([^\)]+\),){5})/\1;\n/g; s/,;/;/g" teste_sp.sql | sed "s/^/INSERT INTO 'TABLE' VALUES /g"
real 0m52.688s
user 0m17.208s
sys 0m0.356s

AWK puro:
time awk -F '[)],[(]' '{for (i=1;i<=NF;i++) printf (i>1?"(" $i:$i) (i<NF?")":"") (i%5==0 && i<NF?";\nINSERT INTO '\''TABLE'\'' VALUES ":(i<NF?",":"\n"))}' teste_sp.sql
real 0m43.486s
user 0m0.944s
sys 0m0.332s

Professor,
Tentei prever o máximo de info que talvez fosse relevante, mas se precisar de mais alguma coisa é só falar.

Observações:
> O arquivo original possui dezesseis linhas;
> Para cada linha o SED apresentou uma pausa de aproximadamente um segundo, não consegui contabilizar isso direito;
> O AWK não apresentou pausa alguma. Foi direto até o final.
> Com o redirecionamento de saída para arquivo " >> cep_sp_data_dump.sql" o AWK foi quase instantâneo;
> O SED levou um tempo consideravelmente maior [talvez por culpa do pipe???];
> O gEdit leva aproximadamente quatro minutos para abrir o arquivo original de 15MB em 16 linhas;
> Já o arquivo resultante é aberto em menos de um minuto e tem mais de 40k linhas em 17MB;
> O arquivo do SED ficou 300kb menor que o do AWK, verifiquei que os últimos registros não foram criados corretamente. a ultima linha só teve o "insert .... value";

Seguem infos do meu pc:
RAM: 8GB

lscpu
Arquitetura:           x86_64
Modo(s) operacional da CPU32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per núcleo  2
Núcleo(s) por soquete:2
Soquete(s):            1
Nó(s) de NUMA:        1
ID de fornecedor:      GenuineIntel
Família da CPU:       6
Modelo:                37
Step:                  5
CPU MHz:               933.000
BogoMIPS:              5054.83
Virtualização:       VT-x
cache de L1d:          32K
cache de L1i:          32K
cache de L2:           256K
cache de L3:           3072K
NUMA node0 CPU(s):     0-3


Em qui, 28 de jan de 2016 às 22:00, 'Julio C. Neves' address@hidden [shell-script] <address@hidden> escreveu:
 

Como em shell tudo é muito difícil de fazer, para medir os tempos de execução não poderia ser diferente. Vc t de colocar o cmd time do awk e antes do sed, ou seja:
    time awk ...
e
    time sed ...
Viu como é difícil.  ;)

Em 28/01/2016 9:48 PM, "Rodrigo Tenorio address@hidden [shell-script]" <address@hidden> escreveu:
 

Não vejo problemas em testar, professor.

Mas não tenho ideia de como posso realizar o teste.
Andei procurando no google e só achei coisas relativas a benchmark e teste de velocidade de conexão.

O que devo fazer para realizar o teste?

Em qui, 28 de jan de 2016 às 08:32, address@hidden [shell-script] <address@hidden> escreveu:
 

Desculpe...


Copiei código errado...
O código puro em awk seria esse:

$ awk -F '[)],[(]' '{for (i=1;i<=NF;i++) printf (i>1?"(" $i:$i) (i<NF?")":"") (i%5==0 && i<NF?";\nINSERT INTO '\''TABLE'\'' VALUES ":(i<NF?",":"\n"))}' arquivo.sql

[]'s
Itamar


reply via email to

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