inserir caracter [RESOLVIDO]

1. inserir caracter [RESOLVIDO]

Guilherme Moura de Souza
sir.guil

(usa CentOS)

Enviado em 04/11/2011 - 13:33h

Boa tarde,

estou editando um arquivo que possui 20.000 linhas, preciso colocar um |(piper) em certas colunas de cada linha,

estou tentando usar o sed para tal mas estou tomando uma surra,

alguém pode me ajudar?


  


2. MELHOR RESPOSTA

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 04/11/2011 - 21:45h

Uma das maneiras que vi para fazer isso é assim:


while read LINHA
do
CP01=$(echo "$LINHA" | cut --bytes=1-6)
CP02=$(echo "$LINHA" | cut --bytes=8-9)
CP03=$(echo "$LINHA" | cut --bytes=10-12)
CP03=$(echo "$LINHA" | cut --bytes=13-15)
CP04=$(echo "$LINHA" | cut --bytes=16-28)
CP05=$(echo "$LINHA" | cut --bytes=29-31)
CP06=$(echo "$LINHA" | cut --bytes=32-)

echo "|$CP01| |$CP02|$CP03|$CP04|$CP05|$CP06" >> destino.txt

done < original.txt


Para isso as linha devem seguir o layout que você passou

Espero que ajude.

3. Re: inserir caracter [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 04/11/2011 - 14:42h

Poste as linhas onde pr ecisa alterar e o que vc já fez


4. Re: inserir caracter [RESOLVIDO]

Guilherme Moura de Souza
sir.guil

(usa CentOS)

Enviado em 04/11/2011 - 14:59h

Este é um exemplo de linha ("esta é só uma linha")

000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 A00000000000000101460000000000000000000000000000000000000000000000000000000000N00000000000000000000000000000000000000303010070213303399991104021007020099226270000000

as outras seguem o mesmo padrão

o que eu preciso fazer é colocar alguns | pipers no decorrer de todas as linhas

ficando assim

|000000| |00|000|000|0000000000000|000|0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 A00000000000000101460000000000000000000000000000000000000000000000000000000000N00000000000000000000000000000000000000303010070213303399991104021007020099226270000000

isso é só um exemplo


5. Re: inserir caracter [RESOLVIDO]

Guilherme Moura de Souza
sir.guil

(usa CentOS)

Enviado em 04/11/2011 - 15:00h

minha duvida pra valer no momento é como adicionar um carácter sem ter de remover outro ou quebrar a linha...


6. Re: inserir caracter [RESOLVIDO]

Guilherme Moura de Souza
sir.guil

(usa CentOS)

Enviado em 04/11/2011 - 15:28h

bom, consegui colocar o 1º piper

sed 's/^/|/' original.txt > destino.txtt

o resultado foi esse
|000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 A00000000000000101460000000000000000000000000000000000000000000000000000000000N00000000000000000000000000000000000000303010070213303399991104021007020099226270000000

agora como fazer ele ir para o próximo coluna?


7. Re: inserir caracter [RESOLVIDO]

Guilherme Moura de Souza
sir.guil

(usa CentOS)

Enviado em 05/11/2011 - 14:32h

Caro só tenho que te agradecer,

realmente funciona, só que ficou lento pelo fato de ter de colocar 83 | por linha e o arquivo ser de 20567 linhas, será que tem um jeito + rápido?


8. Re: inserir caracter [RESOLVIDO]

euteste da silva
foxbit3r

(usa Solaris)

Enviado em 06/11/2011 - 22:26h

Aproveita o código acima e faz em C/C++ que deve ficar mais rápido.


9. Valeu

Jacson
jacsonfh

(usa CentOS)

Enviado em 18/04/2014 - 08:15h

sir.guil escreveu:

bom, consegui colocar o 1º piper

sed 's/^/|/' original.txt > destino.txtt

o resultado foi esse
|000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 A00000000000000101460000000000000000000000000000000000000000000000000000000000N00000000000000000000000000000000000000303010070213303399991104021007020099226270000000

agora como fazer ele ir para o próximo coluna?


Funcionou Obrigado.


10. o sed troca/deleta/insere caracteres em X posição numa string(palavra)

Mario da Silva Santos
mario-bugre.vol

(usa Puppy Linux)

Enviado em 08/09/2017 - 08:40h

fazendo a variavel só para usar no echo:
V="0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 A00000000000000101460000000000000000000000000000000000000000000000000000000000N00000000000000000000000000000000000000303010070213303399991104021007020099226270000000"

echo $V|sed 's/./|/1'|sed 's/./0|/7'|sed 's/./0|/10'|sed 's/./0|/14'|sed 's/./0|/18'|sed 's/./0|/32'|sed 's/./0|/37'
resultado:
|000000|00|000|000|0000000000000|0000|000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 A00000000000000101460000000000000000000000000000000000000000000000000000000000N00000000000000000000000000000000000000303010070213303399991104021007020099226270000000

um "."(ponto) representa uma letra(..=2 ...=3) a ser trocada, "|0" é que ficara no lugar, observe que adiciona o "|"(pipe) trocando o "0" por "|0", 1 é o local na string onde ocorerá a troca, sendo assim troca em 1, 7, 10, 14, 18, 32, 37 sempre relativo ao tamanho da string original.
mas nao servirá se vc tem os numeros aleatórios. Eu uso assim para renomear lotes de nomes de musica com espaços, maiúsculas e acentuação.

o sed tem outro comando que insirirá os pipes em locais determinados por vc.
veja neste link do VoL
https://www.vivaolinux.com.br/topico/Sed-Awk-ER-Manipulacao-de-Textos-Strings/Ajuda-Inserir-caracter...