[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
- Re: [shell-script] Criação de arquivo, (continued)
- Re: Criação de arquivo, itamarnet, 2014/03/17
- Re: [shell-script] Criação de arquivo, Julio C. Neves, 2014/03/17
- Re: [shell-script] Criação de arquivo, Anderson, 2014/03/17
- Re: [shell-script] Criação de arquivo, Ernander (Nander), 2014/03/17
- Re: [shell-script] Criação de arquivo, Valtoir, 2014/03/17
- Re: [shell-script] Criação de arquivo, Anderson, 2014/03/17
- Re: [shell-script] Criação de arquivo, Ernander (Nander), 2014/03/17
- Re: [shell-script] Criação de arquivo, Anderson, 2014/03/17
- Re: [shell-script] Criação de arquivo,
Paulo Bettega <=
- Re: [shell-script] Criação de arquivo, Valtoir, 2014/03/19
- Re: [shell-script] Criação de arquivo, Paulo Bettega, 2014/03/19
- Re: [shell-script] Criação de arquivo, Paulo Bettega, 2014/03/19
- Re: [shell-script] Criação de arquivo, Julio C. Neves, 2014/03/20
- Re: [shell-script] Criação de arquivo, Paulo Bettega, 2014/03/20
- Re: [shell-script] Criação de arquivo, Julio C. Neves, 2014/03/20