Ler e separar arquivos

1. Ler e separar arquivos

Allan Gallo
Gallo_RJ

(usa Red Hat)

Enviado em 10/10/2012 - 06:01h

Bom dia a todos !!

Eu tenho um arquivo de 6 Gb, nesse aruivo tenho `n` informacoes e e separado por `EOD`.
Preciso ler o arquivo e quando chegar no 'EOD' separar para outro arquivo.
Segue o exemplo:

503471.30990 9298248.43915 2336.77222
503461.45976 9298240.74339 2337.22974
503451.60962 9298233.04763 2337.48389
503441.75948 9298225.35186 2337.52319
503431.90934 9298217.65610 2337.37183
503422.05920 9298209.96034 2337.07642
503412.20906 9298202.26458 2336.62939
503402.35893 9298194.56882 2336.08667
503392.50879 9298186.87305 2335.43042
503382.65865 9298179.17729 2334.64282
503372.80851 9298171.48153 2333.75342
503362.95837 9298163.78577 2332.81030
503353.10823 9298156.09000 2331.81787
503343.25809 9298148.39424 2330.78394
503333.40795 9298140.69848 2329.73193
503323.55781 9298133.00272 2328.67432
503313.70767 9298125.30696 2327.62183
503303.85753 9298117.61119 2326.53955
503294.00739 9298109.91543 2325.40356
503284.15725 9298102.21967 2324.21973
503274.30711 9298094.52391 2322.95801
503264.45697 9298086.82815 2321.63696
502890.15167 9297794.38918 2260.53394
502880.30153 9297786.69342 2258.11694
502870.45139 9297778.99766 2255.44165
502860.60125 9297771.30190 2252.50220
502850.75111 9297763.60613 2249.37891
EOD

Agradeco a colaboração!


  


2. Re: Ler e separar arquivos

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/10/2012 - 06:43h


#!/bin/bash

_OUTPUT='output_file'
_INPUT='input_file'

_CONT=0

IFS=$( echo -e "\n" )

while read _LINE
do
_IF_EOD=$( echo "${_LINE}" | grep 'EOD')

if [ "${#_IF_EOD}" -eq 0 ]
then
echo "${_LINE}" >> "${_OUTPUT}_${_CONT}"
else
let _CONT=_CONT+1
fi

done < "${_INPUT}"

reset

# Boa sorte



3. Re: Ler e separar arquivos

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/10/2012 - 08:25h


#!/bin/bash

# Configure : start
_INPUT='/input/file/path'
_OUTPUT='/output/files/prefix'
# Configure : end

_CONT=0

OIFS=$IFS
IFS=$( echo -e "\n" )

function _getTotal()
{
grep 'EOD' "${_INPUT}" |
wc -l |
cut -d ' ' -f 1
}

function _showProgress()
{
echo -ne "Progresso: $( echo "scale=3; ( ${_CONT} * 100 ) / ${_TOTAL} " | bc )% \t \r"
}

function _action()
{
echo "${_LINE}" >> "${_OUTPUT}_${_CONT}"
}

_TOTAL=$(_getTotal)

while read _LINE
do

_IF_EOD=$( echo "${_LINE}" | grep 'EOD' )

if [ "${#_IF_EOD}" -eq 0 ]
then
_action
else
let _CONT=_CONT+1
_showProgress
fi

done < "${_INPUT}"

IFS=$OIFS

# BOA SORTE!!!



4. Re: Ler e separar arquivos

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/10/2012 - 08:56h

Se não fosse uma dor de cabeça do cão eu explicaria o script.

Mas veja que esse ultimo código tem indicador de progresso com 3 casas decimais já que o script levará muito tepo para ser executado...

Indico que seja feito um teste de permissões de leitura no arquivo de entrada para o usuário que rodar o script antes do bloco de reptição com fim inderteminado vulgo while...do...done para que o código fique mais elegante. Isso eu deixo sobre responsabilidade de suas pesquizas futuras sobre shell script.

BOA SORTE!!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts