Pesquisar caracteres especiais em arquivo texto e mostrar sua posição na linha e coluna [RESOLVIDO]

1. Pesquisar caracteres especiais em arquivo texto e mostrar sua posição na linha e coluna [RESOLVIDO]

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 25/06/2016 - 20:47h

Prezados,

Trabalho com um banco de dados que lê arquivos TXT e importa os dados para as tabelas desse BD.
Como quem gera esses arquivos TXT é um outro sistema (o qual não sou eu quem gerencia), muitas vezes ocorre de o arquivo ser gerado com vários caracteres especiais (diferentes de a-z A-Z 0-9, etc) espalhados por todo o arquivo. Assim sendo, o BD não carrega os dados

No caso, já tenho a lista de caracteres especiais (inválidos durante a validação do TXT) que devo procurar no arquivo texto a fim de comunicar o administrador do sistema para que o mesmo realize a devida remoção/correção dos arquivos.

Eu necessito implementar um script ou, caso os comandos já conhecidos como por exemplo o grep, sed ou awk sejam capazes de fazer isso, que mostre a POSIÇÃO dos caracteres inválidos em cada linha da ocorrencia.

Por exemplo, sendo as 2 linhas abaixo, contidas no arquivo.txt, onde a primeira linha está no padrão correto e a segunda contendo os caracteres inválidos:

RS 20160625 Rua João XVIII, N. 1234 Rui Barbosa Cliente Pré-Pago 2132431243
RS 20160625 Rua Jo¿o XVIII, N. 1234 Rui Barbosa Cliente Prþ¶-Pago 2132431243

Necessito que o script ou comando efetue uma busca no arquivo.txt e retorne algo assim:
Linha 2: Caractere ¿ na posição 19; Caractere þ na posição 59; Caractere ¶ na posição 60

Sei que o grep apenas mostra as linhas onde existe a ocorrência, no entanto não mostra a posição dos caracteres.

Assim sendo implementei o script abaixo o qual o algoritmo está praticamente correto, porém, os caracteres especiais no shell são interpretados como espaço em branco + ponto de interrogação. Alguém poderia me ajudar?

--------------------------------------------------------------------------------------------------------------------------------------------------------------
FILE='arquivo.txt'
LINHA=0
lista_char='€ ƒ … † ‡ ‰ Š ‹ Œ Ž • ™ š › œ ž Ÿ ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ'
for i in `cat $FILE`;do
total_char=`echo -n $i | wc -c`;
LINHA=$(( $LINHA + 1 ));
for ((j=1;j<=$total_char;j++));do
aux=`echo -n $i | cut -c $j`;
for z in `echo $lista_char`;do
if [ $aux = $z ];then
echo "Linha $LINHA: encontrado caracter $aux na posicao $j";
fi
done
done
done

--------------------------------------------------------------------------------------------------------------------------------------------------------------
OBS: No meu caso converter o arquivo para outra codificação (UTF-8, ISO-8859-1) além de não resolver meu problema, não é a solução que busco.


  


2. Re: Pesquisar caracteres especiais em arquivo texto e mostrar sua posição na linha e coluna [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/06/2016 - 19:41h

mlgrassi escreveu:

Prezados,

Trabalho com um banco de dados que lê arquivos TXT e importa os dados para as tabelas desse BD.
Como quem gera esses arquivos TXT é um outro sistema (o qual não sou eu quem gerencia), muitas vezes ocorre de o arquivo ser gerado com vários caracteres especiais (diferentes de a-z A-Z 0-9, etc) espalhados por todo o arquivo. Assim sendo, o BD não carrega os dados

No caso, já tenho a lista de caracteres especiais (inválidos durante a validação do TXT) que devo procurar no arquivo texto a fim de comunicar o administrador do sistema para que o mesmo realize a devida remoção/correção dos arquivos.

Eu necessito implementar um script ou, caso os comandos já conhecidos como por exemplo o grep, sed ou awk sejam capazes de fazer isso, que mostre a POSIÇÃO dos caracteres inválidos em cada linha da ocorrencia.

Por exemplo, sendo as 2 linhas abaixo, contidas no arquivo.txt, onde a primeira linha está no padrão correto e a segunda contendo os caracteres inválidos:

RS 20160625 Rua João XVIII, N. 1234 Rui Barbosa Cliente Pré-Pago 2132431243
RS 20160625 Rua Jo¿o XVIII, N. 1234 Rui Barbosa Cliente Prþ¶-Pago 2132431243

Necessito que o script ou comando efetue uma busca no arquivo.txt e retorne algo assim:
Linha 2: Caractere ¿ na posição 19; Caractere þ na posição 59; Caractere ¶ na posição 60

Sei que o grep apenas mostra as linhas onde existe a ocorrência, no entanto não mostra a posição dos caracteres.

Assim sendo implementei o script abaixo o qual o algoritmo está praticamente correto, porém, os caracteres especiais no shell são interpretados como espaço em branco + ponto de interrogação. Alguém poderia me ajudar?
--------------------------------------------------------------------------------------------------------------------------------------------------------------
OBS: No meu caso converter o arquivo para outra codificação (UTF-8, ISO-8859-1) além de não resolver meu problema, não é a solução que busco.

--------------------------------------------------------------------------------------------------------------------------------------------------------------
Boa noite, mlgrassi.
A sua afirmação:
Sei que o grep apenas mostra as linhas onde existe a ocorrência, no entanto não mostra a posição dos caracteres.
É incorreta. :)
Tanto o grep quanto o egrep, mostram o "byte off-set"
Veja:
egrep --help |egrep --color -m1 'offset'
Exemplo:
egrep -ob --color '[^[:alnum:] .,-]' <<< "RS 20160625 Rua Jo¿o XVIII, N. 1234 Rui Barbosa Cliente Prþ¶-Pago 2132431243"
18:¿
61:¶


Att.:
Marcelo Oliver




3. Re: Pesquisar caracteres especiais em arquivo texto e mostrar sua posição na linha e coluna [RESOLVIDO]

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 27/06/2016 - 22:34h

Hum, interessante amigo. Confesso que desconhecia essa funcionalidade do grep. Obrigado pela dica.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts