Por curiosidade, tentaste o mesmo usando sed?
T+
Valtoir
Em 19 de março de 2014 14:20, Paulo Bettega <address@hidden
<mailto: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 ~ $
>