[Resolvido] Script para Manipulação de Texto usando sed

Iniciado por Mero_, 10 de Julho de 2009, 13:42

tópico anterior - próximo tópico

Mero_

 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á.
O verdadeiro Capitalismo não está no sistema, mas sim na mente e no coração das pessoas. (By Myself)

raidicar

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.

clcampos

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!

Mero_

#3
 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
O verdadeiro Capitalismo não está no sistema, mas sim na mente e no coração das pessoas. (By Myself)

Mero_

 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)

clcampos

Citação de: Mero_ 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.

Grande Mero_ parabéns!

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