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

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

Re: [shell-script] Separador de arquivo


From: Julio C. Neves
Subject: Re: [shell-script] Separador de arquivo
Date: Mon, 31 Oct 2011 02:06:20 -0200

Não:
for ind in $(seq 150 6 265); do

Sim:
for ((ind=150; ind<=265; ind+=6))

Cordialmente,

Julio Neves
*Quer programar bem em Shell?
*

*Use este endereço de e-mail, o Skype ou ☎ (21)8112-9988 ☎*

*
*

**

*
*
My profiles: [image: Twitter] <http://twitter.com/juliobash>
Contact me: [image: Skype] julioneves1


Em 30 de outubro de 2011 10:33, Marcos Braga <address@hidden>escreveu:

> **
>
>
> Olá,
>
> Não sei se entendi bem o seu problema, e o teste que fiz com as linhas que
> disponibilizou geraram alguns erros, mas no final funcionaram com seu
> script.
>
> O que não entendi foi que o script gerou 3 arquivos com o mesmo conteúdo.
>
> Como se multiplicasse o arquivo original.
>
> Bom..., creio que isso não vem ao caso.
>
> Em questões de performance, sempre fui a favor de diminuir o número de
> forks utilizados nos scripts, e aprendi uma técnica bem bacana que diminui
> os forks e melhora a performance para esse tipo de situação.
>
> Observe as modificações que fiz no seu script e implementa no seu para ver
> se te atende e se melhora a performance.
>
> while read LINHA; do
>
> for ind in $(seq 150 6 265); do
> nome=*${LINHA:$(($ind-1)):6}*
> reg=*${LINHA:0:2}*
> if *[ ! -z "$nome" ]*; then
> echo "$LINHA" >> arquivoSaida.$reg.$nome.txt
>
> else
> break
> fi
> done
> done < $1
>
> Desculpa tirar os comentários, mas era melhor para trabalhar no código.
>
> []s
> Braga
>
> 2011/10/28 Wilton <address@hidden>
>
> > **
>
> >
> >
> > Ola, pessoal
> >
> > O meu problema é um pouco complicado de explicar, mas qualquer dúvida é
>
> > me falar.
> > Já consegui até fazer um Script, mas gostaria de sugestões para
> melhorias,
> > principalmente de desempenho.
> > Bem, preciso separar um arquivo de texto em vários outros baseados em
> > partes de cada linha dele.
> > Um exemplo de uma das linhas deste arquivo é:
> >
> 05114105841813000016417100000000121130000000000000000{00000000000000{00000000000000{00000000078486G00000000000000{05516010100010499060109201131082011156556154571051583
> > R.
> >
> > Os dois primeiros caracteres da linha representam um registro, ou seja, a
> > linha exemplo é do registro 05.
> > Os caracteres, a partir da posição 151, representam erros. Os erros são
> > compostos de 6 caracteres cada, então, de acordo com a linha de exemplo
> > temos três erros: erro 156556 (caracteres 151 a 156), erro 154571
> > (caracteres 157 a 162), e erro 051583 (caracteres 163 a 168). Os erros
> > podem estender-se pelos caracteres em branco até a letra 'R'.
> >
> > Os registros e erros de cada linha indicarão em qual arquivo está linha
> > deverá constar no resultado. Pelo exemplo que estou utilizando, a linha
> > deverá então constar nos seguintes arquivos de saída, gerados também pelo
> > script:
> > -ArquivoResultado.05.156556.txt
> > -ArquivoResultado.05.154571.txt
> > -ArquivoResultado.05.051583.txt
> >
> > Fiz o script abaixo, que atende a necessidade mas demonstrou baixo
> > rendimento, uma vez que tenho que tratar com arquivos que podem passar
> de 1
> > Gb.
> >
> > # !/bin/bash
> > #
> > # Separador.sh
> > #
> > # Script para separar um arquivo de texto em vários baseados em valor de
> > código de erro e registro constantes e cada linha
> >
> > while read LINHA; do # Laço para percorrer a linha
> >
> > for ind in $(seq 150 6 265); do # Indica as diversas posições em que o
> > código de erro fica na linha
> > nome=`echo $LINHA | cut -c$ind-$((ind+5))` # Nome do erro que fica no fim
> > de cada linha do arquivo
> > reg=`echo $LINHA | cut -c1-2` # Nome do registro que são os dois
> primeiros
> > caracteres de cada linha do arquivo
> > if test "$nome" != " " # Teste para indicar se ainda possui algum erro em
> > determinada linha. Caso esteja em branco, sai para a outra linha.
> > then
> > echo "$LINHA" >> arquivoSaida.$reg.$nome.txt # Aqui gerará os vários
> > arquivos com o nome do erro e o registro
> > else
> > break
> > fi
> > done
> >
> > done < $1 # Parametro onde o usuário indica qual arquivo deseja tratar.
> >
> > Solicito, por favor, amigos, que analisem o script acima e agradeço por
> > qualquer sugestão.
> >
> > Segue abaixo também uma amostra do arquivo que será a entrada do script:
> >
> >
> 05114105841813000016417100000000121130000000000000000{00000000000000{00000000000000{00000000078486G00000000000000{05516010100010499060109201131082011156556154571051583
> > R
> >
> 05114105841813000020769400000000131130000000000000000{00000000000000{00000000000000{00000000014564{00000000000000{03751010100010499060109201131082011156556154571051583
> > R
> >
> 05114105841813000025085200000000111130000000000000000{00000000000000{00000000000000{00000000013287B00000000000000{05092010100010499060109201131082011156556154571051583
> > R
> >
> 05114105841813000025567100000000181130000000000000000{00000000000000{00000000000000{00000000020882G00000000000000{05461010100010499060109201131082011156556154571051583
> > R
> >
> 05114105841813000055403900000000121130000000000000000{00000000000000{00000000000000{00000000019494G00000000000000{04910010100010499060109201131082011156556154571051583
> > R
> >
> 05114105841813000055447200000000171130000000000000000{00000000000000{00000000000000{00000000010115B00000000000000{05702010100010499060109201131082011156556154571051583
> > R
> >
> 05114105841813000070017400000000111130000000000000000{00000000000000{00000000000000{00000000006045G00000000000000{04965010100010499060109201131082011156556154571051583
> > R
> >
> 05114105841813000073785200000000151130000000000000000{00000000000000{00000000000000{00000000073330D00000000000000{05179010100010499060109201131082011156556154571051583
> > R
> >
> 05114105841813000084251500000000151130000000000000000{00000000000000{00000000000000{00000000471382H00000000000000{04578010100010499060109201131082011156556154571051583
> > R
> >
> 05114105841813000086597800000000121130000000000000000{00000000000000{00000000000000{00000000001370A00000000000000{05048010100010499060109201131082011156556154571051583
> > R
> >
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


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



reply via email to

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