Concatenar linhas de arquivos diferentes

1. Concatenar linhas de arquivos diferentes

Reginaldo
angkor

(usa Ubuntu)

Enviado em 16/06/2015 - 14:32h

Olá Pessoal,

Estou tendo dificuldade em manipular dois arquivos linha a linha de forma viável.
A estrutura dos arquivos é assim:

Arquivo1.txt
A
B
C
D

Arquivo2.txt
1
2
3
4

for i in `cat Arquivo1.txt`; do
for j in `cat Arquivo2.txt`; do
echo "$i$2">>lista_completa.txt;
done
done

A saída é A1, A2, A3... D1, D2, D3, D4, cada uma na sua linha, até aqui tudo bem, o problema é quando a linha do Arquivo1.txt tem um nome composto, por exemplo, "João de Souza", nesses casos o comando acima cria uma saída por linha de cada palavra: João1, João2, ..., de1, de2, ..., Souza1, Souza2...
Qual seria a melhor forma de fazer isso?

Desde já agradeço.



  


2. Re: Concatenar linhas de arquivos diferentes

euteste da silva
foxbit3r

(usa Solaris)

Enviado em 16/06/2015 - 16:11h

Comando paste.



$ paste arquivo1.txt arquivo2.txt > arquivo3.txt






3. Re: Concatenar linhas de arquivos diferentes

Reginaldo
angkor

(usa Ubuntu)

Enviado em 16/06/2015 - 16:21h

foxbit3r escreveu:

Comando paste.



$ paste arquivo1.txt arquivo2.txt > arquivo3.txt





Olá foxbit3r
O problema é que esse comando deixa o arquivo assim:
A 1
A 2
A 3
E eu preciso que fique sem espaços.



4. Re: Concatenar linhas de arquivos diferentes

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 16/06/2015 - 17:57h

angkor escreveu:

foxbit3r escreveu:

Comando paste.



$ paste arquivo1.txt arquivo2.txt > arquivo3.txt





Olá foxbit3r
O problema é que esse comando deixa o arquivo assim:
A 1
A 2
A 3
E eu preciso que fique sem espaços.



Olás..

Já que o Arquivo3.txt está pronto, é só da um sed no arquivo3.txt . Por exemplo:

sed -i 's/ //g' arquivo3.txt

Destrinchando:::

-i : para realizar o alteração no proprio arquivo (original)
' : aspas simples para iniciar a expressão
s : Subistituir
/ / : Origem ( no seu caso o tab) PARA DIGITAR O TAB NA LINHA DE COMANDO, APERTE CTRL+V TAB)
// : será trocado por nada.
g : geral - em todas as ocorrencias
' : aspas simples para finalizar a expressão


OBS:: Não tente copiar e colar por causa do tab, não vai dar certo..
Digita no prompt: sed -i 's/CTRL+V DEPOIS TAB//g' arquivo3.txt


5. Re: Concatenar linhas de arquivos diferentes

thinomar
thinomar

(usa Linux Mint)

Enviado em 16/06/2015 - 18:13h

paste arquivo1.txt arquivo2.txt | sed 's/[[:space:]]//g' > arquivodefinitivo.txt 

Explicando
paste irá concatenar o arquivo1 com o arquivo2
sed irá remover qualquer espaço em branco, onde o [[:space:]] engloba todo tipo de espaço em branco.
| (pipe) direciona a saída do primeiro comando para o segundo
> direciona a saída do segundo comando para o arquivo definitivo.
--
sudo make me a sandwich


6. Re: Concatenar linhas de arquivos diferentes

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 18/06/2015 - 23:37h

thinomar escreveu:

paste arquivo1.txt arquivo2.txt | sed 's/[[:space:]]//g' > arquivodefinitivo.txt 

Explicando
paste irá concatenar o arquivo1 com o arquivo2
sed irá remover qualquer espaço em branco, onde o [[:space:]] engloba todo tipo de espaço em branco.
| (pipe) direciona a saída do primeiro comando para o segundo
> direciona a saída do segundo comando para o arquivo definitivo.
--
sudo make me a sandwich



Boa!
...e eu sugerindo mil teclas de atalho ;)



7. Re: Concatenar linhas de arquivos diferentes

Reginaldo
angkor

(usa Ubuntu)

Enviado em 19/06/2015 - 07:47h

Então galera, o paste atenderia somente se os dois arquivos tivessem a mesma quantidade de linhas, que não é meu caso. Tive que ficar com o for encadeado mesmo, embora esteja tomando muito tempo pra unir os arquivos.




8. Re: Concatenar linhas de arquivos diferentes

thinomar
thinomar

(usa Linux Mint)

Enviado em 19/06/2015 - 14:39h

Não entendi. Pq se são de tamanhos diferentes o paste vai imprimir os dois inteiros e só irá concatenar as linhas que os dois tiverem. Exemplo:
arquivo1
1
2
3
4
5

arquivo2
A
B
C
D

paste arquivo1 arquivo2 | sed 's/[[:space:]]//g'
1A
2B
3C
4D
5

Não é isso que você quer?
--
sudo make me a sandwich


9. Re: Concatenar linhas de arquivos diferentes

Reginaldo
angkor

(usa Ubuntu)

Enviado em 19/06/2015 - 14:48h

thinomar escreveu:

Não entendi. Pq se são de tamanhos diferentes o paste vai imprimir os dois inteiros e só irá concatenar as linhas que os dois tiverem. Exemplo:
arquivo1
1
2
3
4
5

arquivo2
A
B
C
D

paste arquivo1 arquivo2 | sed 's/[[:space:]]//g'
1A
2B
3C
4D
5

Não é isso que você quer?
--
sudo make me a sandwich


No seu exemplo, preciso da saida assim:
1A, 1B, 1C, 1D, 2A, 2B, 2C, 2D, 3A, 3B, 3C... e por ai vai.


10. Re: Concatenar linhas de arquivos diferentes

thinomar
thinomar

(usa Linux Mint)

Enviado em 19/06/2015 - 15:30h

Tenta assim então:
#!/bin/bash
#
# Concatenar strings
#
# Criado por: Thiago Martins
#
# Entrada:
# ./script.sh $arquivo1 $arquivo2

# Remove espacos dos arquivos, para evitar fim de registro
# a cada espaco em branco e joga em arquivos temporarios
sed 's/[[:space:]]//g' $1 > /tmp/arq1Temp
sed 's/[[:space:]]//g' $2 > /tmp/arq2Temp

# Foreach e concatenacao dos dois arquivos
for lista1 in `cat /tmp/arq1Temp`
do
for lista2 in `cat /tmp/arq2Temp `
do
echo "$lista1$lista2" >> arquivoDefinitivo
done
done

# Remove arquivos temporarios
rm -f /tmp/arq1Temp /tmp/arq2Temp

A entrada é:
./script.sh /caminho/do/arquivo1 /caminho/do/arquivo2 

E não esquece de dar permissão de execução no script:
chmod +x ./script.sh 

--
sudo make me a sandwich






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts