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: Wed, 19 Mar 2014 14:20:25 -0300
User-agent: Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Thunderbird/24.3.0

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]