Ordenar Arquivo Posicional sem delimitadores [RESOLVIDO]

1. Ordenar Arquivo Posicional sem delimitadores [RESOLVIDO]

Fernando Farias Alves
farias83

(usa Outra)

Enviado em 03/07/2018 - 22:29h

Olá pessoal, blz?
Sou iniciante em shell, e caiu uma demanda para mim aqui, que estou quebrando a cabeça já a 3 dias... O Shell gera um arquivo com header e trailler desordenado em estrutura posicional de campos, sem delimitadores . Só que a partir de agora, devido a regras de negócio, ele deverá ser gerado ordenado. Porém o campo que deverá ser ordenado,está no meio do arquivo(da posição 21 a 33 do exemplo abaixo. Vocês saberiam como eu poderia ordenar um arquivo nesse exemplo sem delimitadores? Tentei várias soluções com o comando sort e seu parametros, porém sem sucesso. Aaah, eu gostaria de saber tbm se teria como conseguir ignorar no comando o header e o trailler. Agradeço desde já qualquer ajuda... Segue abaixo o exemplo do arquivo gerado atualmente, caso ajude

H CYBER TESTES 030720180000000312
738672474769700120180000000077719000120180703000000000010395000000000000704
626791223479300120180000000077721000120180703000000000010379000000000000650
580587306709880120180000000077720000300000000000000000000000000000000000000
738672474769700120180000000077718000300000000000000000000000000000000000000
T0307201800000006000000000312



  


2. MELHOR RESPOSTA

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 04/07/2018 - 11:37h

farias83 escreveu:
Mauricio... Muito obrigado pela ajuda... Resolveu o meu problema aqui... Era isso mesmo... Valeu mesmo.


Bom que resolveu ... precisando é só dar o grito !!!

OBS: Não deixe de assinalar aquela "melhor resposta" .

Abçs.

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------


3. Re: Ordenar Arquivo Posicional sem delimitadores [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 03/07/2018 - 23:29h

farias83 escreveu:

Olá pessoal, blz?
Sou iniciante em shell, e caiu uma demanda para mim aqui, que estou quebrando a cabeça já a 3 dias... O Shell gera um arquivo com header e trailler desordenado em estrutura posicional de campos, sem delimitadores . Só que a partir de agora, devido a regras de negócio, ele deverá ser gerado ordenado. Porém o campo que deverá ser ordenado,está no meio do arquivo(da posição 21 a 33 do exemplo abaixo. Vocês saberiam como eu poderia ordenar um arquivo nesse exemplo sem delimitadores? Tentei várias soluções com o comando sort e seu parametros, porém sem sucesso. Aaah, eu gostaria de saber tbm se teria como conseguir ignorar no comando o header e o trailler. Agradeço desde já qualquer ajuda... Segue abaixo o exemplo do arquivo gerado atualmente, caso ajude

H CYBER TESTES 030720180000000312
738672474769700120180000000077719000120180703000000000010395000000000000704
626791223479300120180000000077721000120180703000000000010379000000000000650
580587306709880120180000000077720000300000000000000000000000000000000000000
738672474769700120180000000077718000300000000000000000000000000000000000000
T0307201800000006000000000312


V se essa gambiarra resolve
#!/bin/bash

# Arquivo Original
ORIGINAL="arquivo_original.txt"

# arquivo que vai ser gerado
ORGANIZADO="arquivo_organizado.txt"

# Copia o "header" do arquivo original para o arquivo que vai ser gerado
head -n1 $ORIGINAL > $ORGANIZADO

# trata o "body" do arquivo original e copia para o arquivo que vai ser gerado
sed 1d $ORIGINAL | sed '$d' | sed 's/.\{21\}/&\ /' | sed 's/.\{34\}/&\ /' | sort -nk2 | sed 's/\ //g' >> $ORGANIZADO

# Copia o "trailer" do arquivo original para o arquivo que vai ser gerado
tail -n1 $ORIGINAL >> $ORGANIZADO


se quiser manter só o arquivo Final, seria só colocar o comando no fim do script
rm $ORIGINAL 


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



4. Re: Ordenar Arquivo Posicional sem delimitadores [RESOLVIDO]

Fernando Farias Alves
farias83

(usa Outra)

Enviado em 04/07/2018 - 10:44h

Mauriciodez escreveu:

farias83 escreveu:

Olá pessoal, blz?
Sou iniciante em shell, e caiu uma demanda para mim aqui, que estou quebrando a cabeça já a 3 dias... O Shell gera um arquivo com header e trailler desordenado em estrutura posicional de campos, sem delimitadores . Só que a partir de agora, devido a regras de negócio, ele deverá ser gerado ordenado. Porém o campo que deverá ser ordenado,está no meio do arquivo(da posição 21 a 33 do exemplo abaixo. Vocês saberiam como eu poderia ordenar um arquivo nesse exemplo sem delimitadores? Tentei várias soluções com o comando sort e seu parametros, porém sem sucesso. Aaah, eu gostaria de saber tbm se teria como conseguir ignorar no comando o header e o trailler. Agradeço desde já qualquer ajuda... Segue abaixo o exemplo do arquivo gerado atualmente, caso ajude

H CYBER TESTES 030720180000000312
738672474769700120180000000077719000120180703000000000010395000000000000704
626791223479300120180000000077721000120180703000000000010379000000000000650
580587306709880120180000000077720000300000000000000000000000000000000000000
738672474769700120180000000077718000300000000000000000000000000000000000000
T0307201800000006000000000312


V se essa gambiarra resolve
#!/bin/bash

# Arquivo Original
ORIGINAL="arquivo_original.txt"

# arquivo que vai ser gerado
ORGANIZADO="arquivo_organizado.txt"

# Copia o "header" do arquivo original para o arquivo que vai ser gerado
head -n1 $ORIGINAL > $ORGANIZADO

# trata o "body" do arquivo original e copia para o arquivo que vai ser gerado
sed 1d $ORIGINAL | sed '$d' | sed 's/.\{21\}/&\ /' | sed 's/.\{34\}/&\ /' | sort -nk2 | sed 's/\ //g' >> $ORGANIZADO

# Copia o "trailer" do arquivo original para o arquivo que vai ser gerado
tail -n1 $ORIGINAL >> $ORGANIZADO


se quiser manter só o arquivo Final, seria só colocar o comando no fim do script
rm $ORIGINAL 


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------


Mauricio... Muito obrigado pela ajuda... Resolveu o meu problema aqui... Era isso mesmo... Valeu mesmo.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts