Validar separador decimal em Awk [RESOLVIDO]

1. Validar separador decimal em Awk [RESOLVIDO]

Alex Sandro Batista Pereira
alexbatistasp

(usa Red Hat)

Enviado em 09/01/2017 - 14:08h

boa tarde, amigos.

Estou tentando validar um arquivo csv se o mesmo está vindo com o separador decimal correto em um campo especifico. Exemplo meu sistema espera virgula como separador decimal se o individuo envia ponto no lugar eu preciso rejeitar o arquivo.

Minha duvida é, estou fazendo o seguinte awk, porém ele não está 100 % correto, quando eu recebo um numero inteiro ele está dando erro também.

Exemplo CSV

1.7
1.8
10
2.0


awk -F";" 'NR>1{if($8 ~ ".") print "CAMPO 8 ERRADO ESTAMOS RECEBENDO PONTO NO LUGAR DE VIRGULA ==> ",$8 }' $arquivo >> \
/A_PROCESSAR/error/Error_${datenow}_${i}


Exemplo CSV

1.7 Errado
1.8 Errado
10 Correto
2.0 Errado





  


2. Re: Validar separador decimal em Awk

Robson Mothé
rmothe

(usa Linux Mint)

Enviado em 09/01/2017 - 14:43h



awk -F";" 'NR>1{if($8 ~ ".") print "CAMPO 8 ERRADO ESTAMOS RECEBENDO PONTO NO LUGAR DE VIRGULA ==> ",$8 }' $arquivo >> \
/A_PROCESSAR/error/Error_${datenow}_${i}


O erro ocorre pois o "ponto" é um operador na regex, já que não está quotado. Desta maneira ele representa "qualquer coisa uma vez".

Substitua:
if($8 ~ ".") 

por
if($8 ~ "\.") 

assim seu problema estará resolvido pois o "ponto" deixou de ser um operador para ser um caractere!

Linux Counter: #318909


3. Re: Validar separador decimal em Awk

Alex Sandro Batista Pereira
alexbatistasp

(usa Red Hat)

Enviado em 09/01/2017 - 15:45h


O erro ocorre pois o "ponto" é um operador na regex, já que não está quotado. Desta maneira ele representa "qualquer coisa uma vez".

Substitua:
if($8 ~ ".") 

por
if($8 ~ "\.") 

assim seu problema estará resolvido pois o "ponto" deixou de ser um operador para ser um caractere!

Linux Counter: #318909


Fiz um teste com essa alteração e tive o mesmo assim ele está dando erro no numero sem ponto.

Resultado
CAMPO 8 ERRADO ESTAMOS RECEBENDO PONTO NO LUGAR DE VIRGULA ==> 2.08
CAMPO 8 ERRADO ESTAMOS RECEBENDO PONTO NO LUGAR DE VIRGULA ==> 5
CAMPO 8 ERRADO ESTAMOS RECEBENDO PONTO NO LUGAR DE VIRGULA ==> 1.27
CAMPO 8 ERRADO ESTAMOS RECEBENDO PONTO NO LUGAR DE VIRGULA ==> 24.18




4. Re: Validar separador decimal em Awk

thinomar
thinomar

(usa Linux Mint)

Enviado em 09/01/2017 - 15:53h

echo -e "1.7\n1,8\n10\n2.0" | awk -F';' '$1 ~ /\./ {print "PONTO NO LUGAR DE VIRGULA ==>  " $1 }' 



5. Re: Validar separador decimal em Awk [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/01/2017 - 17:23h

Boa tarde, no "lugar" de REJEITAR . . .
Vamos "ARRUMAR" o arquivo.

N=""
while IFS=" " read -a FIELD;do
let N++
[[ "${FIELD[7]}" =~ ^[0-9]+\.[0-9]+$ ]] && sed -i "${N}s/${FIELD[7]}/${FIELD[7]/\./,}/" ARQ_CSV
done<ARQ_CSV


marcelo oliver


6. Re: Validar separador decimal em Awk [RESOLVIDO]

Robson Mothé
rmothe

(usa Linux Mint)

Enviado em 09/01/2017 - 19:24h

thinomar escreveu:

echo -e "1.7\n1,8\n10\n2.0" | awk -F';' '$1 ~ /\./ {print "PONTO NO LUGAR DE VIRGULA ==>  " $1 }' 


Mantive as aspas erroneamente!
Obrigado pela correção.

Linux Counter: #318909






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts