Reformatar números negativos com sed ou awk

1

Eu tenho um arquivo de texto que contém alguns números negativos, exceto que eles são formatados como:

00000012 -

Com o hífen após o número.

Estou processando o arquivo usando o awk para reformatá-lo em comandos de inserção SQL e o interpretador SQL está sufocando no número porque o sinal negativo aparece após o número.

Existe um regex que pode mover o sinal negativo antes do número?

    
por JayDM 22.06.2016 / 03:15

3 respostas

2

com sed :

echo 00000012- |  sed -e 's/\([0-9]+\)\(-\)\?//'

-00000012 .

Ou seja, combinando dois grupos, o primeiro com dígitos e o segundo com um sinal, mas usando zero ou mais correspondências de que e, em seguida, substituindo os dois intercambiados.

    
por 22.06.2016 / 03:22
0

Em vez disso, confie no SQL para corrigir o problema:

create table #Tempt (Value VarChar(100))

Insert Into #Tempt Values(NULL)
Insert Into #Tempt Values('500.1-')
Insert Into #Tempt Values('-500.1')
Insert Into #Tempt Values('20.5')


select *, case when Value like '%-' then '-' + replace(value,'-',') else value end
 From   #Tempt

Em seguida, use a inserção em massa para extrair os valores de #Tempt para qualquer que seja sua tabela real.

Extraído de Inserir valores negativos em massa .

Why do people always expect programmers to clean up goofy stuff like this?

Você não é o único ...

    
por 22.06.2016 / 04:14
0

com sed:

sed -e 's/\<\([0-9.]\+\)-/-/g'

ou

sed -E -e 's/\<([0-9+]+)-/-/g'

Com o GNU awk:

awk '{$0=gensub(/\<([0-9.]+)-/,"-\1","g"); print }'

NOTA: requer o GNU awk para a função gensub() . Nem sub() nem gsub() suportam grupos de captura.

Com perl:

perl -p -e 's/\b([\d.]+)-/-$1/g'
    
por 23.06.2016 / 03:24

Tags