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

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

Re: [shell-script] Substituir determinada posição


From: Tiago Peczenyj
Subject: Re: [shell-script] Substituir determinada posição
Date: Wed, 10 Aug 2016 18:19:30 +0200

Ola

eu vejo algumas opções

awk com variavel FIELDWIDTHS onde vc especifica o tamanho de cada campo ( e ai cria campos pares de 1 caracter q sera o seu S para ignorar ). o man do awk fala melhor sobre esta variavel

pode especificar a variavel OFS pra escolher o separador

$ awk -v OFS="|" -v FIELDWIDTHS="8 1 19 1 13 1 8" '{ print $1,$3,$5, $7 }' example
12233455|ajjdhkfklmdkljedjjs|sjskdjjSantos|williams
12233455|ajjdhkfklmdkljedjjs|sjskdjjrantos|williams
12233455|ajjdhkfklmdkljedjjs|sjskdjjyantos|williams
aaz33455|ajjdhkfklmdkljedjjs|sjskdjjanytos|willis12

vc pode usar o cut para pegar apenas o campos que vc quer, sem o S e ai usar o awk ou sed para pegar as posições, algo como

$ cut -c 1-8,10-20,22-28 arquivo | ...

mas ele sozinho nao ajuda muito.


2016-08-07 4:25 GMT+02:00 address@hidden [shell-script] <address@hidden>:
 

Prezados,

Peço a gentileza em encontrar uma solução, para a questão.

Arquivo de entrada modelo:

12233455SajjdhkfklmdkljedjjsSsjskdjjSantosSwilliamsS
12233455SajjdhkfklmdkljedjjsSsjskdjjrantosSwilliamsS
12233455SajjdhkfklmdkljedjjsSsjskdjjyantosSwilliamsS
aaz33455SajjdhkfklmdkljedjjsSsjskdjjanytosSwillis12S


Por incrível que pareça colocaram o caractere 'S' maiusculo como separador, por este motivo um simples tr ou um sed não funcionária corretamente.


A primeira linha do exemplo consta um a string que possui o valor: "sjskdjjSantos", na terceira coluna.

 

A parte boa que tudo possui tamanho fixo, eu já consegui identificar as posições onde devo substituir, mas não consegui montar um sed que realize as substituições.


Poderia ser utilizado um laço para ler linha a linha cortando (substrings) e remontando as partes, mas o arquivo é muito grande e o tempo de processamento não será satisfátório.


Como realizar a substituição?


Somente dos campos: "9 29 43 52"


Obrigado




--
Tiago B. Peczenyj

http://about.me/peczenyj

reply via email to

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