Pular para o conteúdo

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

Responder tópico
  • Denunciar
  • Indicar

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

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.

Responder tópico

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

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]

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

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

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder