Isso é bastante fácil com sed
,
se todos os dados se parecem com os dados da amostra:
sed -e 's/)0\.0\(.\)[0-9]*/)/g' -e 's/)0\.\(..\)[0-9]*/)/g' -e 's/)1\.00[0-9]*/)100/g' file
Isso tem três% subcomandos-e
, que são variações do mesmo tema.
Cada um procura por um )
seguido por um número decimal
entre 0,00 e 1,00, com pelo menos dois dígitos decimais,
e substitui-o por um )
seguido pelo inteiro correspondente
entre 0 e 100.
Cada um termina com g
para torná-lo global
por isso afeta qualquer número de suportes de ramificação em cada linha.
Infelizmente, isso trunca os números em vez de arredondá-los
então 0.838
se torna 83
em vez de 84
.
Detalhes:
-
s/)0\.0\(.\)[0-9]*/)/g
Procura um número que comece com0.0
(por exemplo,0.00
ou0.07
) e substitui-o por apenas o segundo dígito decimal, então0.00
e0.07
se tornam0
e7
em vez de00
e07
.[0-9]*
corresponde a qualquer número de dígitos após o segundo e descarta-os (substituindo-os por nada). -
s/)0\.\(..\)[0-9]*/)/g
Esse é o caso geral:0.
seguido por algo diferente de0
. Isso muda0.832000
para83
, etc. -
s/)1\.00[0-9]*/)100/g
Isso procura1.00
e altera para100
. Se você tem certeza de que isso nunca aparecerá nos seus dados, você pode deixar este subcomando.
Se, como você sugere no título da pergunta,
você também quer poder alterar 0,234000
(com uma vírgula como uma marca decimal) para 23
,
altere \.
para [,.]
em cada um dos subcomandos.