Como posso acrescentar zeros ou substituir um número por outro em determinadas colunas? [RESOLVIDO]

1. Como posso acrescentar zeros ou substituir um número por outro em determinadas colunas? [RESOLVIDO]

Carolina Queiroz
carolinaq

(usa Ubuntu)

Enviado em 22/09/2020 - 19:04h

Olá.
Eu tenho vários arquivos com 7 colunas de dados e milhares de linhas. Na segunda coluna, os valores variam de 0 a 2350, com um intervalo de 10. Na sétima coluna (última), os valores variam de 2000 a 15000, com 1000 de intervalo. Então, quando o valor na segunda coluna for 0, eu gostaria de substituir para 0000. Quando o valor estiver entre 10 e 50, substituir para 0010, 0020, 0030, 0040 e 0050, respectivamente, e quando o valor estiver entre 110 e 950, substituir por 0110, por exemplo. Isto é, gostaria de deixar essa segunda coluna no formato de hora e minuto, sem os dois pontos ( : ).

E no caso da última coluna, quando o valor tiver somente 4 dígitos, preciso acrescentar um 0 a esquerda.

Alguém pode me ajudar a fazer isto?


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 22/09/2020 - 20:01h

carolinaq escreveu:

Olá.
Eu tenho vários arquivos com 7 colunas de dados e milhares de linhas.
Na segunda coluna, os valores variam de 0 a 2350, com um intervalo de 10.
Na sétima coluna (última), os valores variam de 2000 a 15000, com 1000 de intervalo.
Então, quando o valor na segunda coluna for 0, eu gostaria de substituir para 0000.
Quando o valor estiver entre 10 e 50, substituir para 0010, 0020, 0030, 0040 e 0050, respectivamente,
e, quando o valor estiver entre 110 e 950, substituir por 0110, por exemplo.
Isto é, gostaria de deixar essa segunda coluna no formato de hora e minuto, sem os dois pontos ( : ).

E no caso da última coluna, quando o valor tiver somente 4 dígitos, preciso acrescentar um 0 a esquerda.

Alguém pode me ajudar a fazer isto?


Utilize o printf.
Exemplo:
printf "%04d\n" 10
"Printa" o número com 4 dígitos
Pelo que entendi,
2º campo com 4 dígitos e 7º campo com 5 dígitos.....
Resolução:
Supondo que o "IFS" é ; (ponto e virgula), caso seja outro, só trocar na linha abaixo....
awk -F";" '{printf "%s;%04d;%s;%s;%s;%s;%05d\n" ,$1,$2,$3,$4,$5,$6,$7}' arquivo 


Obs.:
Atente-se que:
Colocando "0" a esquerda, terá problemas no "bash".
Ex:
echo $((08/2))
bash: 08: valor muito grande para esta base de numeração (token de erro é "08")
printf "%02d\n" '08'
bash: printf: 08: número octal inválido
00
Nada que não tenha solução.....
printf "%02d\n" "$((10#08))" #"Avise o bash" que a base é decimal......
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________





Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts