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: Valtoir
Subject: Re: [shell-script] Criação de arquivo
Date: Wed, 19 Mar 2014 15:35:38 -0300

Por curiosidade, tentaste o mesmo usando sed?

T+

Valtoir


Em 19 de março de 2014 14:20, Paulo Bettega <address@hidden> escreveu:
 

Olá pessoal, como o awk não é meu amigo (ainda), fiz um loop linha por linha com while,
e fiquei espantado com a diferença de tempo de execução entre o loop com while e o comando do awk.

O arquivo que eu usei tem 65 linhas, tem a linha com os nomes dos campos
e mais 64 linhas com os valores (é um extrato de poupança).

"Conta";"Data_Mov";"Nr_Doc";"Historico";"Valor";"Deb_Cred"
"3333222111111111";"20130101";"000000";"REM BASICA";"0.00";"C"

time while read linha; do
echo "sinc_t $( echo $linha|cut -d\; -f2) U $(echo $linha|cut -d\; -f3) U"
done <01.txt

real 0m1.954s
user 0m0.723s
sys 0m0.260s

awk do Ernander, só mudei o separador
time awk 'BEGIN {FS=";"}{print "sinc_t "$2" U "$3" U"}' 01.txt

real 0m0.217s
user 0m0.013s
sys 0m0.010s

O awk é quase dez vezes mais rápido? É isso mesmo ou eu cometi algum erro?
Os tempos variam, mas o awk sempre é menos de 0,5s e o while sempre é mais de 1,5s.
Na grande maioria das vezes a diferença é essa de quase dez vezes a mais.

Vendo que trabalhar com colunas talvez seja melhor do que com linhas, pensei em cortar as
colunas e imprimir com o paste.
time paste -d U <(
while read linha; do
echo "sinc_t $linha "
done <<<"$(cut -d\; -f2 <01.txt)"
) \
<(
while read linha; do
echo " $linha U"
done <<<"$(cut -d\; -f3 <01.txt)"
)

real 0m0.056s
user 0m0.015s
sys 0m0.005s

Ficou muito mais próximo do tempo do awk do que do loop linha por linha do while.

Conclusão que eu tirei, linha por linha só se não tiver outro jeito,
e começar a aprender awk pra valer :)

Abraços Paulo Bettega



On 17-03-2014 11:33, Ernander (Nander) wrote:
> Olha como é mais Fácil, viu?
>
> com esses dados vc pode fazer::
>
> awk '{print "sinc_t "$1" U "$2" U"}' arquivo.txt
>
> Teste aí Veja:ernander@TensaZangetsu ~ $ cat arquivo.txt Contratos Telefones TESTE01
> 3322229999 xxxxxxx xxxxxxxxxx ernander@TensaZangetsu ~ $ awk '{print "sinc_t "$1" U "$2"
> U"}' arquivo.txt sinc_t Contratos U Telefones U sinc_t TESTE01 U 3322229999 U sinc_t xxxxxxx U
> xxxxxxxxxx U ernander@TensaZangetsu ~ $
>
>
>
>
>
>
> Em 17 de março de 2014 11:28, Anderson <address@hidden <mailto:address@hidden>>
> escreveu:
>
> __

>
> Eles então em um arquivo .txt no seguinte formato:
>
> Contratos Telefones xxxxxxx xxxxxxxxxx xxxxxxx xxxxxxxxxx
>
> Gostaria de saber uma forma de editar todos de uma só vez para o formato abaixo, para serem
> processados.
>
> sinc_t 1111111 U 2222222 U contrato fone
>
>
>
> Vlw
>



reply via email to

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