Autor Tópico: [Resolvido] Script para Manipulação de Texto usando sed  (Lida 2686 vezes)

Offline Mero_

  • Usuário Ubuntu
  • *
  • Mensagens: 86
  • Slack, Because It Works! Keep It Simple, Stupid..
    • Ver perfil
[Resolvido] Script para Manipulação de Texto usando sed
« Online: 10 de Julho de 2009, 13:42 »
 Bom dia/tarde/noite galera.
 Seguinte, estou tentando gerar um arquivo .csv com uma lista de contatos para serem adicionados ao gmail, os Nomes e E-mails já foram retirados de uma planilha (arquivo.xls), criei 2 arquivos de texto, um com os Nomes dos contatos e outro com o E-mail, sendo que nesses arquivos fica apenas um Nome / E-mail por linha (são 1350 linhas em cada arquivo, pois tenho 1350 Nomes e E-mails), só preciso de um script para fazer o seguinte:

Retirar o NomeDaPrimeiraLinha do arquivo "NOMES" + o E-mailDaPrimeiraLinha do arquivo "E-mails" e adicioná-los numa mesma linha do arquivo "CONTATOS.csv", assim sucessivamente, até o último Nome e Email, ficando um par de informações (Nome + E-mail) por linha dentro do arquivo "CONTATOS.csv", ficando com as mesmas 1350 linhas.
 
 Espero não tê-los confundido muito... rsrs
 Eu estava pesquisando aqui: http://thobias.org/doc/sosed.html, mas as informações são limitadas para o que preciso (manipulação de mais de um arquivo de texto ao mesmo tempo).
.
 Alguém com prática em SED ou algum outro programa pra me dar uma força por favor? Agradeço desde já.
« Última modificação: 11 de Julho de 2009, 09:47 por Mero_ »
O verdadeiro Capitalismo não está no sistema, mas sim na mente e no coração das pessoas. (By Myself)

Offline raidicar

  • Usuário Ubuntu
  • *
  • Mensagens: 576
  • Quad Shot of Ubuntu
    • Ver perfil
Re: Script para Manipulação de Texto usando sed
« Resposta #1 Online: 11 de Julho de 2009, 00:24 »
Conheço o arquivo .csv, mas nunca dei atenção quando o exporto ou importo, estou em um base 100% linux agora então, a duvida é: O .csv é um arquivo de texto normal?
Além disso, não sei como o mesmo é organizado, você dis que o nome e o email vem na mesma linha, existe espaço entre o nome e o email? quanto de espaço?
Tentou alguma coisa? chegou a algum lugar?

Esse tópico estária melhor se fosse postado na seção de shellscript.
Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

Offline clcampos

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 10.790
  • .:: User Linux #439596 ::.
    • Ver perfil
Re: Script para Manipulação de Texto usando sed
« Resposta #2 Online: 11 de Julho de 2009, 00:39 »
Opa, to movendo ele para o local indicado, muito sabiamente, pelo raidicar.

Agora sei que já tem um comando que faz a união como deseja... basta mesmo é lembrar... hehehe
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

Offline Mero_

  • Usuário Ubuntu
  • *
  • Mensagens: 86
  • Slack, Because It Works! Keep It Simple, Stupid..
    • Ver perfil
Re: Script para Manipulação de Texto usando sed
« Resposta #3 Online: 11 de Julho de 2009, 00:51 »
 Oi raidicar, o .csv é um arquivo de texto normal sim, mas não precisa se preocupar com isso, nem com espaçamentos, quero apenas uma linha de comando (provavelmente via sed) que faça, ao mesmo tempo:

 Copiar a Linha1 do Arquiv1 e colar na  Linha1 do Arquivo3 (inicialmente em branco);
 Copiar a Linha1 do Arquivo2 para o final da primeira linha já inciada no Arquivo3 (considerando o procedimento supracitado).
 Depoias a segunda;
 Depois a Terceita;

 Considerar:
 O Arquivo1 só tem uma informação por linha, que é um nome de cadastro, são 1350 linhas, somando 1350 nomes.
 O Arquivo2 só tem uma informação por linha, que é um e-mail, o E-mail da primeira linha desse arquivo corresponde ao nome que está na primeira linha do Arquivo1, e assim sucessivamente.

 Isso recursivamente até a 1350 linha (Os arquivso 1 e 2 têm 1350 linhas cada) formando um Arquivo3 com 1350 linhas tbm, contendo os dados do Arquivo1 + os dados do Arquivo2.
 O resto eu desenrolo.

 Infelizmente progredi quase nada ainda, comecei a pegar em sed hoje (vergonha..:().
 Acho que o princípio seria esse:

sed '1s/^/começo do arquivo/'  Arquivo1.txt > Arquivo3.txt  
sed '1s/$/final da linha/' Arquivo2.txt > Arquivo3.txt              

sed '2s/^/começo do arquivo/'  Arquivo1.txt > Arquivo3.txt  (Aqui falta apontar a saida pra linha seguinte do Arquivo3)
sed '2s/$/final da linha/' Arquivo2.txt > Arquivo3.txt              (Aqui falta apontar a saida pra linha seguinte do Arquivo3)

Só que nem imagino como fazer isso recursivamente, nem como jogar o conteúdo noutra linha do Arquivo3. Mas não é viável uma entrada do sed como descrito acima pra cada linha que devo copiar :(.. rsrs
« Última modificação: 11 de Julho de 2009, 11:51 por Mero_ »
O verdadeiro Capitalismo não está no sistema, mas sim na mente e no coração das pessoas. (By Myself)

Offline Mero_

  • Usuário Ubuntu
  • *
  • Mensagens: 86
  • Slack, Because It Works! Keep It Simple, Stupid..
    • Ver perfil
Re: Script para Manipulação de Texto usando sed
« Resposta #4 Online: 11 de Julho de 2009, 09:47 »
 Oi galera, grato pela força raidicar e Cristiano, mas acabei de achar o que eu queria, tópico resolvido.
 À título de informação, o que eu queria era juntar 2 arquivos, sendo que as linhas de cada um fossem unidas, gerando um terceiro arquivo com o mesmo números de linhas, resultado da união do arquivo1 + arquivo2. Comando:

$sed 'N;s/\n/\t/' arquivo1.txt arquivo2.txt > arquivo3.txt

 Obrigado.
O verdadeiro Capitalismo não está no sistema, mas sim na mente e no coração das pessoas. (By Myself)

Offline clcampos

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 10.790
  • .:: User Linux #439596 ::.
    • Ver perfil
Re: Script para Manipulação de Texto usando sed
« Resposta #5 Online: 11 de Julho de 2009, 09:49 »
Oi galera, grato pela força raidicar e Cristiano, mas acabei de achar o que eu queria, tópico resolvido.
 À título de informação, o que eu queria era juntar 2 arquivos, sendo que as linhas de cada um fossem unidas, gerando um terceiro arquivo com o mesmo números de linhas, resultado da união do arquivo1 + arquivo2. Comando:

$sed 'N;s/\n/\t/' arquivo1.txt arquivo2.txt > arquivo3.txt

 Obrigado.

Grande Mero_ parabéns!

Anotei sua dica.
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!