msoliver
(usa Debian)
Enviado em 12/11/2015 - 18:13h
Boa tarde Jessica.
A solução que encontrei foi a seguinte:
Com base nas informações passadas...
Número da Transação: Campos de 1 a 5
Data da Transação: Campos de 6 a 15
(+1)
Hora da Transação: Campos de 16 a 17
(+2)
Minuto da Transação: Campos de 18 a 19
(+3)
Segundos da Transação: Campos de 20 a 21
(+4)
Número do Terminal: Campos de 22 a 25
Gerei o seguinte:
1º COMANDO
CAMPOS=(5 16 19 22 25 30)
Obs: O Nº aumenta a medida que é inserido o "
;"
2º COMANDO
for ((X=0;X<${#CAMPOS[@]};X++));do echo -e $(for ((A=0;A<"${CAMPOS[$X]}";A++));do echo -n "."; done) >> CAMPOS.txt;done
3º COMANDO
for ((X=1;X<=6;X++));do VAR=$(sed -n "$X"p CAMPOS.txt);sed -i 's/\('$VAR'\)/&\;/' FILE.txt; done
Breve explicação:
1º COMANDO => Campos onde você deseja incluir ";"
2º COMANDO => Gera o arquivo CAMPOS.txt com o seguinte conteúdo (cada ponto é um caractere):
cat CAMPOS.txt
.....
................
...................
......................
.........................
..............................
3º COMANDO => Pega cada linha de CAMPOS.txt, atribuo o conteúdo a $VAR. No sed, caso com $VAR, repito $VAR e coloco ";"
FILE.txt => Arquivo que será alterado
Antes
105222014-09-151157040946
105222014-10-151157040946
105222014-11-151157040946
105222014-12-151157040946
105222014-13-151157040946
105222014-14-151157040946
Depois
10522;2014-09-15;11;57;04;0946;
10522;2014-10-15;11;57;04;0946;
10522;2014-11-15;11;57;04;0946;
10522;2014-12-15;11;57;04;0946;
10522;2014-13-15;11;57;04;0946;
10522;2014-14-15;11;57;04;0946;
Resumindo . . .
Os 03 comandos citados acima solucionam o problema.
Em tempo
Para manter uma cópia do seu arquivo, altere o 3º COMANDO, assim:
for ((X=1;X<=6;X++));do VAR=$(sed -n "$X"p CAMPOS.txt);sed -i.BACKUP 's/\('$VAR'\)/&\;/' FILE.txt; done
Espero ter ajudado...
Att.:
Marcelo Oliver
EDITADO :
Simplificando :
FILE01.txt # Seu arquivo de exemplo
#!/bin/bash
#1º Passo
#Um registro por linha (se for o caso)
sed -i 's/ /\n/g' FILE01.txt
#2º Passo
#Define campos
CAMPOS=(5 16 19 22 25 30)
#3ºPASSO
#Insere
";"
for ((X=0;X<${#CAMPOS[@]};X++));do
sed -i 's/\(.\)/&;/'${CAMPOS[$X]}'' FILE01.txt
done
exit 0
FILE01.txt alterado
10522;2014-11-15;11;57;04;0946;
23845;2014-11-15;08;15;26;0863;
10587;2014-11-15;17;51;14;0483;
20054;2014-11-15;01;20;10;0024;
09038;2014-11-15;20;52;56;0305;
23214;2014-11-15;23;47;44;0326;
Att.:
Marcelo Oliver