Como concatenar linhas dentro de um arquivo em caso especifico.

1. Como concatenar linhas dentro de um arquivo em caso especifico.

Gerson Pereira dos Santos
gesonsa

(usa Outra)

Enviado em 13/08/2015 - 16:07h

Tenho um arquivo que preciso concatenar algumas linhas e não estou conseguindo.

EX: pppp
hhhh
3333
aaaaa
pppppp
3333
fffffff

gostaria de obter o seguinte resultado
EX: pppp
hhhh 3333
aaaaa
pppppp 3333
fffff
desenvolvi uma shell porem ela apresenta o seguinte resultado

EX: pppp
hhhh
3333 aaaaa
pppppp
3333 fffffff
Alguem poderia me ajudar?


  


2. Re: Como concatenar linhas dentro de um arquivo em caso especifico.

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 13/08/2015 - 19:27h

Olá,

Acredito que na vida real, o arquivo "pppp" contenha milhares de linhas e/ou existam varios "pppp's". Certo?
Seguindo essa lógica, criei um script que realiza a concatenação do jeito que vc quer. O arquivo pode ter 1 ou milhões de linhas.
Deixei o mais flexível e comentado possível para que vc possa fazer modificações.

Obviamente deve existir uma maneira mais elegante de se fazer isso, mas não ficaria flexível e tbm não pensei em outra forma, rsrsrsrs


segue:

VERSÃO 1: Vc precisa editar o script e alterar o nome do arquivo real.

#!/bin/bash
#
# Script feito para o user @gesonsa do VOL.
#
#Realiza concatenação de linhas em arquivo, seguindo 2 padrões.
#
#

#Arquivo com dos dados
arq='pppp'

#Arquivos temporários
tmp1='/tmp/arq_temp1'
tmp2='/tmp/arq_temp2'

# Arquivo Final
final=$2

#Quantidade de vezes que o looping vai rodar (monta o seq de 0 á qtd de linhas de 3 em 3)
loop=$(seq 0 3 $(wc -l $arq | sed 's/[^0-9]//g'))

#transforma o aquivo com os dados em 1 só linha
paste -s $arq > $tmp1

#Inicia o looping
for i in $loop
do sed -i 's/\s/\n/2' $tmp1 #Troca espaço por quebra linha somente na segunda ocorrência.
head -1 $tmp1 >> $tmp2 # lê a primeira linha do arquivo tratado na linha acima e adiciona ao final do tmp2
sed -i '1d' $tmp1 # exclui a linha tratada do tmp1.
sed -i 's/\s/\n/1' $tmp1 #Troca espaço por quebra linha somente na PRIMEIRA ocorrência.
head -1 $tmp1 >> $tmp2 # lê a primeira linha do arquivo tratado na linha acima e adiciona ao final do tmp2
sed -i '1d' $tmp1 # exclui a linha tratada do tmp1.
done

tr "\t" " " <$tmp2 > $final # Troca os tabs por espaços comuns.

rm -f $tmp1 $tmp2 # Pode parecer frescura, mas é importante essa linha, pois impede de contaminar o arquivo tmp2 (caso execute o Script mais de uma vez).

# Exibe o resultado
cat $final

#FIM
echo -e "\n\n O arquivo $arq foi tratado com sucesso e seu resultado foi armazenado em $final . \n\n"


VERSÃO 2: Não precisa editar nada. basta informar o nome do arquivo que contem os dados e o nome do arquivo de saída após o nomo do script. Por ex:
 ./script.sh arquivo_origem arquivo_tratado 


#!/bin/bash
#
# Script feito para o user @gesonsa do VOL.
#
#Realiza concatenação de linhas em arquivo, seguindo 2 padrões.
#
# UTILIZAÇÃO:
# ./script.sh arquivo_origem arquivo_tratado

#Arquivo com dos dados
arq=$1

#Arquivos temporários
tmp1='/tmp/arq_temp1'
tmp2='/tmp/arq_temp2'

# Arquivo Final
final=$2

#Quantidade de vezes que o looping vai rodar (monta o seq de 0 á qtd de linhas de 3 em 3)
loop=$(seq 0 3 $(wc -l $arq | sed 's/[^0-9]//g'))

#transforma o aquivo com os dados em 1 só linha
paste -s $arq > $tmp1

#Inicia o looping
for i in $loop
do sed -i 's/\s/\n/2' $tmp1 #Troca espaço por quebra linha somente na segunda ocorrência.
head -1 $tmp1 >> $tmp2 # lê a primeira linha do arquivo tratado na linha acima e adiciona ao final do tmp2
sed -i '1d' $tmp1 # exclui a linha tratada do tmp1.
sed -i 's/\s/\n/1' $tmp1 #Troca espaço por quebra linha somente na PRIMEIRA ocorrência.
head -1 $tmp1 >> $tmp2 # lê a primeira linha do arquivo tratado na linha acima e adiciona ao final do tmp2
sed -i '1d' $tmp1 # exclui a linha tratada do tmp1.
done

tr "\t" " " <$tmp2 > $final # Troca os tabs por espaços comuns.

rm -f $tmp1 $tmp2 # Pode parecer frescura, mas é importante essa linha, pois impede de contaminar o arquivo tmp2 (caso execute o Script mais de uma vez).

# Exibe o resultado
cat $final

#FIM
echo -e "\n\n O arquivo $arq foi tratado com sucesso e seu resultado foi armazenado em $final . \n\n"



OBS::: Não esqueça de atribuir permissão de execução ao script.
 chmod +x script.sh 



Espero que ajude.

abs

---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


3. Re: Como concatenar linhas dentro de um arquivo em caso especifico.

Gerson Pereira dos Santos
gesonsa

(usa Outra)

Enviado em 13/08/2015 - 19:42h


Boa noite, Tony.

No momento não estou no trabalho e sem acesso ao ambiente não tenho como testar, mais analisei o script e creio que ira funcionar sim,
e como vc disse realmente o arquivo contem muitas linhas.

Agradeço muito pela ajuda, e pela rapidez da resposta.

Amanhã informo se funcionou ou não, valeu mesmo.


4. Re: Como concatenar linhas dentro de um arquivo em caso especifico.

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 13/08/2015 - 19:55h

gesonsa escreveu:


Boa noite, Tony.

No momento não estou no trabalho e sem acesso ao ambiente não tenho como testar, mais analisei o script e creio que ira funcionar sim,
e como vc disse realmente o arquivo contem muitas linhas.

Agradeço muito pela ajuda, e pela rapidez da resposta.

Amanhã informo se funcionou ou não, valeu mesmo.


Blza brother!

Para facilitar, editei o post e adicionei mais uma versão.

Tomara que ajude.

abs

---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


5. Re: Como concatenar linhas dentro de um arquivo em caso especifico.

Gerson Pereira dos Santos
gesonsa

(usa Outra)

Enviado em 13/08/2015 - 20:02h


Agradeço novamente, o script que eu desenvolvi recebe o arquivo de entrada e o de saída por parâmetros, assim como vc fez com o arquivo a ser tratado no segundo script agradeço novamente.



6. Re: Como concatenar linhas dentro de um arquivo em caso especifico.

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 13/08/2015 - 20:04h

gesonsa escreveu:


Agradeço novamente, o script que eu desenvolvi recebe o arquivo de entrada e o de saída por parâmetros, assim como vc fez com o arquivo a ser tratado no segundo script agradeço novamente.

Noix!

O que havia postado só tratava o de entrada. Modifiquei para tratar o de saída tbm.

Abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


7. Re: Como concatenar linhas dentro de um arquivo em caso especifico.

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 17/08/2015 - 13:42h

Fala Brother, blza?

Deu certo o script?

Lembra quando postei que existia um modo mais "elegante" de se fazer isso?

Pois bem, aquele script gigante cheio de firulas pode ser substituído por 1 comando só:
paste -s -d'\t\n\n' pppp > saida.txt


Abs,


---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


8. Re: Como concatenar linhas dentro de um arquivo em caso especifico.

Gerson Pereira dos Santos
gesonsa

(usa Outra)

Enviado em 18/08/2015 - 17:12h


Boa Tarde, Tony.

Desculpas pela demora estive atuando em outro projeto e tive que deixar a shell em segundo plano.

Testei o Script que você mandou e aparentemente o comando "seq" não esta funcionando nessa versão do UNIX, vou testar essa ultima linha de comando e te dou um retorno, novamente obrigado pela força.


9. Re: Como concatenar linhas dentro de um arquivo em caso especifico.

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 19/08/2015 - 01:34h

Opa, tranquilo.

Estranho unix nao rodar o seq, pode postar o erro?

Sobre o comando, aqui rodou direitinho. rs


abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


10. Como concatenar linhas dentro de um arquivo em caso especifico.

David
baixinho930

(usa Ubuntu)

Enviado em 20/01/2017 - 12:16h

tonyhts escreveu:

Fala Brother, blza?

Deu certo o script?

Lembra quando postei que existia um modo mais "elegante" de se fazer isso?

Pois bem, aquele script gigante cheio de firulas pode ser substituído por 1 comando só:
paste -s -d'\t\n\n' pppp > saida.txt


Abs,


---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---








consegui fazer funcionar, mais nesse caso sera que consigo adicionar as linhas com mesmo nome ? EX:

list1.txt
andre_28_30
daniel_30_45
pedro_90_26

pedro_marques
daniel_augusto
andre_peixoto

e no caso ficar assim:

list2.txt
andre_28_30 andre_peixoto
daniel_30_45 daniel_augusto
pedro_90_26 pedro_marques

quase mesma coisa só que identificando nomes nas linhas











Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts