Existe alguma forma de ordenar um arquivo texto por colunas da ESQ. para a DIR. ? [RESOLVIDO]

13. Re: Existe alguma forma de ordenar um arquivo texto por colunas da ESQ. para a DIR. ? [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 11/07/2017 - 19:04h

mlgrassi escreveu:

Amigo, gostei muito de sua ideia, mas me da uma dica para a seguinte linha:
linha_cabecalho=($(head -1 documento.txt | tr ';' ' ')

Mas na verdade encontrei um problema aqui. Quando o vetor é populado com o comando acima, existe um campo da coluna que possui espaços, que no caso é o campo Nome do Cliente. Ocorre que como o delimitador default em vetores é o espaço em branco, cada palavra do campo será atribuída a um índice, ou seja, índice x=Nome índice y=do e índice z=Cliente.
Na tentativa de contornar este problema, eu alterei o comando acima para utilizar o sed como substituidor de strings ao invés do tr, para incluir áspas duplas em cada campo para estes serem interpretados como devem ser:

linha_cabecalho=($(head -1 documento.txt | sed "s/^\|$/\"/g" | sed "s/\;/\"\ \"/g"))

Isto irá gerar a saída: "Telefone" "Endereço" "Nome do Cliente" "ID" "Bairro" "Estado" "Cidade" "Número"

Até aí tudo bem. O problema ocorre quando isso é atribuído ao vetor linha_cabecalho, onde as áspas duplas são interpretadas como caractere e não como intervalo de dados.

Alguma sugestão para resolver isso?


Apenas para complementar:

Não havia percebido. Cada espaço em branco pode ser substituídos por underline antes da construção do array. Basta inserir um sed antes do tr:

linha_cabecalho=($(head -1 documento.txt | sed 's/ /_/g' | tr ';' ' ') 


Na verdade dá para usar outro tr. Algo como tr ' ' '_'. Sed, tr ... para trocar apenas um caractere tanto faz.




  



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts