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

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

Re: [shell-script] Alguma forma de rolar a leitura de um arquivo todo?


From: Julio C. Neves
Subject: Re: [shell-script] Alguma forma de rolar a leitura de um arquivo todo?
Date: Mon, 9 Feb 2009 11:54:31 -0200

Fala Kurt,
o problema é que o Shell, contrariamente ao que se pensa, tem muitos
recursos, e assim sendo, vc sempre terá uma saída melhor para cada problema.
Se o sed não resolver o seu problema, pode ser que o awk resolva ou outra
aplicação qq.

Vou te dar um exemplo: Para escrever AS (não é ass?) ;) no início da linha,
vc poderia ter feito:

cat arq | xargs -i echo AS{}

Vou te mostrar o genérico (muito melhor do que a sua solução), mas que mesmo
assim (com a manipulação do IFS, p. ex.) frequentemente (sem trema) pode ser
melhorado. Veja
aqui<http://wiki.softwarelivre.org/TWikiBar/TWikiBarPapo007#E_agora_podemos_ler_os_dados_da>tudo
que vc precisa, inclusive com diversos macetes. O texto está em
português (carioquês) e é de fácil leitura.
-- 
Abração,
Julio
Cursos de Shell e Zenity nos finais de semana:
- Em SP ligue (11) 2125-4747;
- Em DF ligue (61) 3223-3000;
- No RJ brevemente;
- Turmas fechadas em outras cidades ligue (21) 8112-9988


2009/2/9 Kurt Kraut <address@hidden>

>   Aloha,
>
> Obrigado MrBiTS e Flavio. Nesse caso que mostrei sim, quero adicionar
> AS no inicio de cada linha, mas foi só um exemplo próximo do que
> preciso que mostrei. Ainda assim tenho a necessidade cotidiana de ler
> arquivos gigantescos linha por linha, interpretá-las e processá-las.
>
> Apesar do sed se aplicar a adesão do termo AS no início de cada linha,
> para meus outros usos que tenho enfrentado baixa performance com
> head+tail, o sed não dá conta. Por isso estou a procura dos mais
> diversos métodos para ler linha a linha um arquivo e executar uma ação
> a cada linha.
>
> Ainda estou aberto a mais sugestões se alguém conseguir pensar numa.
>
> Agradeço pela atenção de todos,
>
> Kurt Kraut
>
> 2009/2/9 Flavio Junior <address@hidden <billpp%40gmail.com>>:
>
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA1
> >
> > Não entendi bem.. mas me parece que o que tu quer é adicionar um "AS"
> > no inicio de todas as linhas?
> >
> > Não poderia fazer algo como:
> >
> > # sed 's/^/AS/' arquivo.log > list05.txt
> >
> > Se por acaso tu só quer da primeira linha até auqele numero que definiu
> ali:
> >
> > # sed '1,33486s/^/AS/' arquivo.log > list05.txt
> >
> > Desculpe se não entendi o que quer.
> >
> > - --
> >
> > Flávio do Carmo Jùnior aka waKKu
> >
> > -----BEGIN PGP SIGNATURE-----
> > Version: GnuPG v1.4.9 (MingW32)
> > Comment: http://getfiregpg.org
> >
> > iEYEARECAAYFAkmQG4wACgkQgyuXjr6dyks12wCdHhBat2li4AhRbOsL0ByIimG2
> > LiYAniSRHp8YMRoXlqfzqpHTHkblj5cm
> > =R46p
> > -----END PGP SIGNATURE-----
> >
> > 2009/2/9 MrBiTS <address@hidden <mrbits%40linuxmasters.info>>:
> >> -----BEGIN PGP SIGNED MESSAGE-----
> >> Hash: SHA1
> >>
> >> Kurt Kraut wrote:
> >>> Aloha,
> >>>
> >>> Eu tenho feito muitos trabalhos em que preciso que o script leia linha
> >>> por linha de um log e a interprete. A forma que tenho feito o trabalho
> >>> é essa:
> >>>
> >>>
> >>> i=1
> >>> while [ $i -le 33486 ]
> >>> do
> >>> line="$(head -$i arquivo.log|tail -1)"
> >>> echo AS$line >> list05.txt
> >>> i=`expr $i + 1`
> >>> done
> >>>
> >>>
> >>> Onde arquivo.log tem 33486 linhas. Este script levou 8min58sec para
> >>> ser executado em um servidor ocioso. Acompanhando o tail -f list05.txt
> >>> vi que a escrita era em rajadas. Toda a performance me pareceu
> >>> bastante insatisfatória.
> >>>
> >>> Alguém me recomenda uma forma mais eficiente de ler um arquivo linha a
> >>> linha ?
> >>>
> >>>
> >>> Desde já agradeço a atenção,
> >>
> >> Um arquivo de 33.000 linhas é nada. Leio arquivos cujo tSeu problema não
> >> está na leitura do arquivo em sí.amanho vai na ordem dos
> >> Gigabytes em instantes.
> >>
> >> Veja que você faz um head para pegar a linha que você quer e um expr
> para
> >> calcular. Eu aconselho você a usar um outro recurso para
> >> ler os arquivos:
> >>
> >> LINHA=0
> >> while read LINE ; do
> >> echo AS$LINHA
> >> done < arquivo.log >> list05.txt
> >>
> >> Isso já mata o head, o redirecionamento e você não tem que incrementar
> seu
> >> contador de linha.
> >>
> >> - --
> >>
> >> Um abraço
> >>
> >> .0. MrBiTs - address@hidden <mrbits%40linuxmasters.info>
> >> ..0 GnuPG -
> >>
> >>
> http://keys.cardboard.net:11371/pks/lookup?op=get&search=0xAC37715A6DD1F186
> >> 000 http://www.mrbits.com.br
> >>
> >> -----BEGIN PGP SIGNATURE-----
> >> Version: GnuPG v1.4.6 (GNU/Linux)
> >>
> >> iD8DBQFJkBUarDdxWm3R8YYRAotcAJ95UCSHEwuGXBbPuOBLxHpaP/LZrQCfWPWs
> >> MVleB+zAUaKi5UikWGGPL4I=
> >> =WcMK
> >> -----END PGP SIGNATURE-----
> >>
> >
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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