Ajuda para tirar caracter especial de um arquivo --> <LS> ou ^\ [RESOLVIDO]

1. Ajuda para tirar caracter especial de um arquivo --> <LS> ou ^\ [RESOLVIDO]

Alexandre Rios
alex_tj

(usa Outra)

Enviado em 01/11/2016 - 19:07h

Galera
Boa tarde,
Tenho um problema e gostaria de ajuda.
Aqui no trabalho o pessoal me envia um arquivo chamado TESTE.TXT que contém as seguintes informações: NumConta, AnoMes, Cooperativa e Valor --> e esses dados ficam dispostos como mostrado abaixo (sem cabeçalho):

X|200110|1003|0
X|200111|1003|1
Y|200110|1001|2
Y|200111|1001|6
Z|200112|1005|0

Todavia preciso realizar um pivoteamento dessa informação onde gero um arquivo secundário para que uma outra aplicação leia.
O código que uso para pivotear é esse:

awk -F"|" '{if(!X[$1]++){FIR=FIR?FIR"_"$1"""":$1} {Y[$1,$2,"|",$3]=$4;Z[$2,"|",$3]++}}END{n=split(FIR,FCL,"_");for(i=1;i<=n;i++){s=s?s"|"FCL[i]:FCL[i]} print s; for(j in Z){s=j;for(i=1;i<=n;i++){split(FCL[i],PK,"_");p=Y[PK[1],j]?Y[PK[1],j]:0;s=s"|"p};print s}}' TESTE.TXT > TESTE_2.TXT

Porém depois que utilizo esse comando de pivot e dou um vi no arquivo TESTE_2.TXT ele apresenta o caracter especial <LS> = file separator - que também é representado por ^\ .

Preciso substituir esse caracter especial por espaço em branco ou fazer uma forma com que ele não apareça, pois minha aplicação secundária não reconhece esse caracter e dá erro.

O resultado final do arquivo TESTE_2.TXT quando dado o comando de vi fica:
X|Y|Z
200111^\|^\1001|0|6|0
200112^\|^\1005|0|0|0
200111^\|^\1003|1|0|0
200110^\|^\1001|0|2|0
200110^\|^\1003|0|0|0

E preciso que fique apenas assim:
X|Y|Z
200111|1001|0|6|0
200112|1005|0|0|0
200111|1003|1|0|0
200110|1001|0|2|0
200110|1003|0|0|0

Poderiam me ajudar? Desde já valeu galera...! Tentei ser o mais claro possível.

Abç.



  


2. Re: Ajuda para tirar caracter especial de um arquivo --> <LS> ou ^\ [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/11/2016 - 21:42h

alex_tj escreveu:

Galera
Boa tarde,
Tenho um problema e gostaria de ajuda.
Aqui no trabalho o pessoal me envia um arquivo chamado TESTE.TXT que contém as seguintes informações: NumConta, AnoMes, Cooperativa e Valor --> e esses dados ficam dispostos como mostrado abaixo (sem cabeçalho):

X|200110|1003|0
X|200111|1003|1
Y|200110|1001|2
Y|200111|1001|6
Z|200112|1005|0

Todavia preciso realizar um pivoteamento dessa informação onde gero um arquivo secundário para que uma outra aplicação leia.
O código que uso para pivotear é esse:

awk -F"|" '{if(!X[$1]++){FIR=FIR?FIR"_"$1"""":$1} {Y[$1,$2,"|",$3]=$4;Z[$2,"|",$3]++}}END{n=split(FIR,FCL,"_");for(i=1;i<=n;i++){s=s?s"|"FCL[i]:FCL[i]} print s; for(j in Z){s=j;for(i=1;i<=n;i++){split(FCL[i],PK,"_");p=Y[PK[1],j]?Y[PK[1],j]:0;s=s"|"p};print s}}' TESTE.TXT > TESTE_2.TXT

Porém depois que utilizo esse comando de pivot e dou um vi no arquivo TESTE_2.TXT ele apresenta o caracter especial <LS> = file separator - que também é representado por ^\ .

Preciso substituir esse caracter especial por espaço em branco ou fazer uma forma com que ele não apareça, pois minha aplicação secundária não reconhece esse caracter e dá erro.

O resultado final do arquivo TESTE_2.TXT quando dado o comando de vi fica:
X|Y|Z
200111^\|^\1001|0|6|0
200112^\|^\1005|0|0|0
200111^\|^\1003|1|0|0
200110^\|^\1001|0|2|0
200110^\|^\1003|0|0|0

E preciso que fique apenas assim:
X|Y|Z
200111|1001|0|6|0
200112|1005|0|0|0
200111|1003|1|0|0
200110|1001|0|2|0
200110|1003|0|0|0

Poderiam me ajudar? Desde já valeu galera...! Tentei ser o mais claro possível.

Abç.


======================================================
Boa noite Alex.
Segue sugestão:
Antes

cat TEXTO.txt
200111^\|^\1001|0|6|0
200112^\|^\1005|0|0|0
200111^\|^\1003|1|0|0
200110^\|^\1001|0|2|0
200110^\|^\1003|0|0|0

Aplicando o comando:
sed -i 's/\^\\//g' TEXTO.txt

Depois . . .
cat TEXTO.txt
200111|1001|0|6|0
200112|1005|0|0|0
200111|1003|1|0|0
200110|1001|0|2|0
200110|1003|0|0|0

lynx --dump goo.gl/a9KeFc|sed -n '/^Educação/,/ajudou/p' 

Att.:
Marcelo Oliver


3. Re: Ajuda para tirar caracter especial de um arquivo --> <LS> ou ^\ [RESOLVIDO]

Alexandre Rios
alex_tj

(usa Outra)

Enviado em 03/11/2016 - 11:04h

Fala Marcelo Oliver,

Bom dia,

Mano desde já agradeço aí, mas o que acontece é o seguinte quando eu dou um cat no arquivo ele aparece normalmente sem espaço ou caracter especial, o problema é que esse caracter só aparece no vi.
Se tiver um email ou algum lugar aqui que eu possa enviar um arquivo de teste, seria mais fácil pra demonstrar o erro que está dando.

Abc.


4. Re: Ajuda para tirar caracter especial de um arquivo --> <LS> ou ^\ [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 03/11/2016 - 11:19h

alex_tj escreveu:

Fala Marcelo Oliver,

Bom dia,

Mano desde já agradeço aí, mas o que acontece é o seguinte quando eu dou um cat no arquivo ele aparece normalmente sem espaço ou caracter especial, o problema é que esse caracter só aparece no vi.
Se tiver um email ou algum lugar aqui que eu possa enviar um arquivo de teste, seria mais fácil pra demonstrar o erro que está dando.

Abc.


Bom dia Alex.
Para não expor o e-mail, vou enviar uma "MENSAGEM" . . .
Explique o comando awk, por favor . . . .

att.:
marcelo oliver



5. Re: Ajuda para tirar caracter especial de um arquivo --> <LS> ou ^\ [RESOLVIDO]

Alexandre Rios
alex_tj

(usa Outra)

Enviado em 03/11/2016 - 12:54h

Marcelo,

Te encaminhei lá os 2 arquivos o principal e o secundário gerado a partir do comando de split (pivoteamento)
awk -F"|" '{if(!X[$1]++){FIR=FIR?FIR"_"$1"""":$1} {Y[$1,$2,"|",$3]=$4;Z[$2,"|",$3]++}}END{n=split(FIR,FCL,"_");for(i=1;i<=n;i++){s=s?s"|"FCL[i]:FCL[i]} print s; for(j in Z){s=j;for(i=1;i<=n;i++){split(FCL[i],PK,"_");p=Y[PK[1],j]?Y[PK[1],j]:0;s=s"|"p};print s}}' ARQ_PRINCIPAL.TXT > TESTE.TXT

O ARQ_PRINCIPAL.TXT não tem o caracter especial mas o TESTE.TXT aparece quando é olhado a partir do comando de vi apenas.

o awk -F eu uso para dizer que meu arquivo de origem o ARQ_PRINCIPAL.TXT tem suas colunas delimitadas pelo pipe "|".

Obrigado mais uma vez.

Abç.




6. Re: Ajuda para tirar caracter especial de um arquivo --> <LS> ou ^\ [RESOLVIDO]

Alexandre Rios
alex_tj

(usa Outra)

Enviado em 03/11/2016 - 17:26h

Galera,

Boa tarde,

Sei que não é a melhor solução, mas me atende!
Bom o que fiz foi aproveitei a ideia do Marcelo só que delimitei através do comando sed os caracteres que devem aparecer no arquivo final, com isso o caracter especial saiu.
No meu arquivo é possível que tenha apenas Letras, Números, "-" (traço), "|" (pipe), "," (ponto) e "," (vírgula) o que for diferente disso deve ser ignorado.
Então o comando fica:

sed 's/[^0-9a-Z|,.-]//g' TESTE.TXT | sort -n -t"|" -k2 -k1 > ARQUIVO_FINAL.TXT


Marcelo valeu pela ajuda!

Abç.


7. Re: Ajuda para tirar caracter especial de um arquivo --> <LS> ou ^\ [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 03/11/2016 - 17:49h

alex_tj escreveu:

Marcelo,

Te encaminhei lá os 2 arquivos o principal e o secundário gerado a partir do comando de split (pivoteamento)
awk -F"|" '{if(!X[$1]++){FIR=FIR?FIR"_"$1"""":$1} {Y[$1,$2,"|",$3]=$4;Z[$2,"|",$3]++}}END{n=split(FIR,FCL,"_");for(i=1;i<=n;i++){s=s?s"|"FCL[i]:FCL[i]} print s; for(j in Z){s=j;for(i=1;i<=n;i++){split(FCL[i],PK,"_");p=Y[PK[1],j]?Y[PK[1],j]:0;s=s"|"p};print s}}' ARQ_PRINCIPAL.TXT > TESTE.TXT

O ARQ_PRINCIPAL.TXT não tem o caracter especial mas o TESTE.TXT aparece quando é olhado a partir do comando de vi apenas.

o awk -F eu uso para dizer que meu arquivo de origem o ARQ_PRINCIPAL.TXT tem suas colunas delimitadas pelo pipe "|".

Obrigado mais uma vez.

Abç.



Alex, não recebi os arquivos....
mso







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts