concatenar por nomes

1. concatenar por nomes

David
baixinho930

(usa Ubuntu)

Enviado em 20/01/2017 - 10:00h

Ola tudo bem, tenho uma duvida pode me ajudar.

Tenho 2 arquivos lista1.txt e lista2.txt com algumas linhas ex:

lista1.txt

daniel_29anos_branco
julio_22anos_azul
tulio_38anos_amarelo

lista2.txt
julio_caixa4_144
andre
tulio_caixa9_89
joao
daniel_caixa71_76
paulo


Gostaria de saber se existe um comando para recortar as linhas da lista2.txt e adicionar na lista1.txt ficando assim:

lista1.txt

daniel_29anos_branco daniel_caixa71_76
julio_22anos_azul julio_caixa4_144
tulio_38anos_amarelo tulio_caixa9_89

adicionar pelo mesmo nome na mesma linha seria possivel ?

Grato.




  


2. Re: concatenar por nomes

Carlos A. P. Cunha
Carlos_Cunha

(usa Linux Mint)

Enviado em 20/01/2017 - 10:32h

Um comando bem especifico acho que não(quem sabe sed ou awk)
Mas com uma junção de comando sim, acredito ser possivel...
O que vc ja fez até momento ?


#-------------------------------------------------------------------------------------#

"Linux is cool"


3. Re: concatenar por nomes

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 20/01/2017 - 10:37h

baixinho930 escreveu:
adicionar pelo mesmo nome na mesma linha seria possivel ?
Grato.


v se isso te resolve

http://dan-scientia.blogspot.com.br/2009/08/juntando-arquivos-linha-linha-no-linux.html
___________________________________________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


4. Re: concatenar por nomes

Rafael da cruz
toskoon

(usa CentOS)

Enviado em 20/01/2017 - 10:37h

Bom dia,

Pelo que entendi você precisa colar lado a lado e em ordem de nomes correto? Nesses arquivos você nunca tem nomes iguais? digo isso pq não vi nenhum identificados único entre os dois arquivos que não seja o nome.

Bom seguindo os exemplos que você mandou uma forma simples é usar o comando "SORT" e o comando "PASTE".
Ex:

##Ordenar linhas dos arquivos lista1 e lista2:
sort -t '_' lista1.txt > filtro1
sort -t '_' lista2.txt > filtro2

#Colar os arquivos:
paste -d " " filtro1  filtro2 > resultadofinal.txt 



Com esses comando tente ajustar um script melhor para você.

Veja essa questão dos nomes iguais. caso tenha algum exemplo de como fica posta ai.

abs.





5. Re: concatenar por nomes

David
baixinho930

(usa Ubuntu)

Enviado em 21/01/2017 - 08:24h

toskoon escreveu:

Bom dia,

Pelo que entendi você precisa colar lado a lado e em ordem de nomes correto? Nesses arquivos você nunca tem nomes iguais? digo isso pq não vi nenhum identificados único entre os dois arquivos que não seja o nome.

Bom seguindo os exemplos que você mandou uma forma simples é usar o comando "SORT" e o comando "PASTE".
Ex:

##Ordenar linhas dos arquivos lista1 e lista2:
sort -t '_' lista1.txt > filtro1
sort -t '_' lista2.txt > filtro2

#Colar os arquivos:
paste -d " " filtro1  filtro2 > resultadofinal.txt 



Com esses comando tente ajustar um script melhor para você.

Veja essa questão dos nomes iguais. caso tenha algum exemplo de como fica posta ai.

abs.







Eu fiz isso mais existe linhas a mais em um arquivo do que no outro entao ele não concatena certo.




6. Re: concatenar por nomes

David
baixinho930

(usa Ubuntu)

Enviado em 21/01/2017 - 08:28h

Mauriciodez escreveu:

baixinho930 escreveu:
adicionar pelo mesmo nome na mesma linha seria possivel ?
Grato.


v se isso te resolve

http://dan-scientia.blogspot.com.br/2009/08/juntando-arquivos-linha-linha-no-linux.html
___________________________________________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"




Verifiquei mais como nosso amigo disse ai tbem se as linhas estivessem todas nas quantidade certas ai dava certo, mais existe mais nomes na lista2 que na lista1 nao tem, ou seja tenho que ignorar os nomes da lista 2, editei a pergunta la tbem...




7. Re: concatenar por nomes

Rafael da cruz
toskoon

(usa CentOS)

Enviado em 24/01/2017 - 10:39h

baixinho930 escreveu:

Mauriciodez escreveu:

baixinho930 escreveu:
adicionar pelo mesmo nome na mesma linha seria possivel ?
Grato.


v se isso te resolve

http://dan-scientia.blogspot.com.br/2009/08/juntando-arquivos-linha-linha-no-linux.html
___________________________________________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"




Verifiquei mais como nosso amigo disse ai tbem se as linhas estivessem todas nas quantidade certas ai dava certo, mais existe mais nomes na lista2 que na lista1 nao tem, ou seja tenho que ignorar os nomes da lista 2, editei a pergunta la tbem...




Então você precisa explicar qual a condição de exclusão para gerar uma condicional no escript. no exemplo que você deu, entendi que você ignorou todos os nomes soltos(andre,joão e paulo), e usou todos os nomes que continha as linhas que tinha a padrão "nome_caixa.._.."
Seguindo essa lógica você pode simplesmente dar um grep por "caixa" ou "_" e jogar a saída para outro arquivo.

exemplo:
 grep "_" lista2.txt > lista3.txt 


com isto você vai gerar uma terceira lista onde vai ter só as linhas que tiver _ e vai ignorar os nomes soltos. depois de gerar a terceira lista só seguir os passos que já tinha mencionado substituindo lista2 por lista3.

Mas vê ai tenta explicar melhor qual linhas podem ser excluídas que tentamos bolar outra coisa.

Abs.




8. concatenar por nomes

David
baixinho930

(usa Ubuntu)

Enviado em 27/01/2017 - 10:28h

toskoon escreveu:

baixinho930 escreveu:

Mauriciodez escreveu:

baixinho930 escreveu:
adicionar pelo mesmo nome na mesma linha seria possivel ?
Grato.


v se isso te resolve

http://dan-scientia.blogspot.com.br/2009/08/juntando-arquivos-linha-linha-no-linux.html
___________________________________________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"




Verifiquei mais como nosso amigo disse ai tbem se as linhas estivessem todas nas quantidade certas ai dava certo, mais existe mais nomes na lista2 que na lista1 nao tem, ou seja tenho que ignorar os nomes da lista 2, editei a pergunta la tbem...




Então você precisa explicar qual a condição de exclusão para gerar uma condicional no escript. no exemplo que você deu, entendi que você ignorou todos os nomes soltos(andre,joão e paulo), e usou todos os nomes que continha as linhas que tinha a padrão "nome_caixa.._.."
Seguindo essa lógica você pode simplesmente dar um grep por "caixa" ou "_" e jogar a saída para outro arquivo.

exemplo:
 grep "_" lista2.txt > lista3.txt 


com isto você vai gerar uma terceira lista onde vai ter só as linhas que tiver _ e vai ignorar os nomes soltos. depois de gerar a terceira lista só seguir os passos que já tinha mencionado substituindo lista2 por lista3.

Mas vê ai tenta explicar melhor qual linhas podem ser excluídas que tentamos bolar outra coisa.

Abs.





Ola amigo então no caso eu gostaria de concatenar apenas por nome pois é a unica coisa que tem em comum entre os dois arquivos no exemplo eu coloquei caixa mais na verdade a unica coisa que existe na lista1 e lista2 em comum é o nome, ja tentei colocar todos em apenas uma lista organizar com o comando sort e tentar concatenar mais como eu disse na lista 2 existe nomes que nao tem na lista um então nem eu enumerando as linhas para tentar concatenar pelos numeros não consegui.







9. Re: concatenar por nomes

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 27/01/2017 - 13:02h

baixinho930 escreveu:

Ola tudo bem, tenho uma duvida pode me ajudar.

Tenho 2 arquivos lista1.txt e lista2.txt com algumas linhas ex:

lista1.txt

daniel_29anos_branco
julio_22anos_azul
tulio_38anos_amarelo

lista2.txt
julio_caixa4_144
andre
tulio_caixa9_89
joao
daniel_caixa71_76
paulo


seguinte ... achei um modo mas não saberia como fazer esse script ... pelo menos não agora na hora do almoço

1° - compara a 1ª coluna com cut'_' da lista 1 com a lista 2 e exclui os não iguais ... depois daria para concatenar de boa com o tutorial quete passei !!!
___________________________________________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


10. Re: concatenar por nomes

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/01/2017 - 15:39h

baixinho930 escreveu:

Ola tudo bem, tenho uma duvida pode me ajudar.

Tenho 2 arquivos lista1.txt e lista2.txt com algumas linhas ex:

lista1.txt

daniel_29anos_branco
julio_22anos_azul
tulio_38anos_amarelo

lista2.txt
julio_caixa4_144
andre
tulio_caixa9_89
joao
daniel_caixa71_76
paulo


Gostaria de saber se existe um comando para recortar as linhas da lista2.txt e adicionar na lista1.txt ficando assim:

lista1.txt

daniel_29anos_branco daniel_caixa71_76
julio_22anos_azul julio_caixa4_144
tulio_38anos_amarelo tulio_caixa9_89

adicionar pelo mesmo nome na mesma linha seria possivel ?

Grato.



Boa tarde Baixinho, verifique se atende a sua necessidade . . .
while IFS="_" read -r C1 C2 C3;do
if egrep "$C1" lista02 > lista.tmp;then
echo "${C1}_${C2}_${C3} $(cat lista.tmp)" >> lista03;fi
done<lista01



marcelo oliver


11. Re: concatenar por nomes

David
baixinho930

(usa Ubuntu)

Enviado em 31/01/2017 - 09:34h

msoliver escreveu:

baixinho930 escreveu:

Ola tudo bem, tenho uma duvida pode me ajudar.

Tenho 2 arquivos lista1.txt e lista2.txt com algumas linhas ex:

lista1.txt

daniel_29anos_branco
julio_22anos_azul
tulio_38anos_amarelo

lista2.txt
julio_caixa4_144
andre
tulio_caixa9_89
joao
daniel_caixa71_76
paulo


Gostaria de saber se existe um comando para recortar as linhas da lista2.txt e adicionar na lista1.txt ficando assim:

lista1.txt

daniel_29anos_branco daniel_caixa71_76
julio_22anos_azul julio_caixa4_144
tulio_38anos_amarelo tulio_caixa9_89

adicionar pelo mesmo nome na mesma linha seria possivel ?

Grato.



Boa tarde Baixinho, verifique se atende a sua necessidade . . .
while IFS="_" read -r C1 C2 C3;do
if egrep "$C1" lista02 > lista.tmp;then
echo "${C1}_${C2}_${C3} $(cat lista.tmp)" >> lista03;fi
done<lista01



marcelo oliver


não consegui bom para facilitar irei colocar como esta a lista1 e lista2 dos meus arquivos

lista1.txt
abel_velasco_zeballos|abel|alameda_catxere|200|condominio_chapada
acelho_de_azevedo_pereira|acelho|al._dos_eucaliptos|955|condominio_farm
adailton_izidoro|adailton|rua_maria_aparecida_clementino|189|parque_américa
adriana_villas_boas_nunes|adriananunes|alameda_das_sibipirunas|0|vila_swevia
agnaldo_faria_de_menezes|agnaldo|rua_maria_diggroco_cavacchini|51|parque_américa
agua_boa_dugri_ltda|agua|rodovia_prefeito_hilario|10|pedregulho
ailton_domingos_da_silva|ailtondomingos|rua_damião_gonçalves_da_silva|58|parque_américa
ailton_josé_pedrosa|ailton|perobas|5|condominio_farm
aírton_da_silva_dimas|airtondimas|rua_suriname|198|parque_américa
alberto_silveira_neto|alberto|rua_suriname|281|parque_américa
alberto_werner_holzer|albertowerner|alameda_das_quaresmeiras|2|vila_swevia
alessandra_mesa_herrera|alessandra|estrada_do_butuxim|0|altos_de_itu
alex_sandro_pedro_da_cunha|alexsandro|rua_havana|30|parque_américa
alexandre_martinez_milla|alexandre|alameda_das_sibipirunas|0|vila_swevia
amauri_da_silva|amauri|alameda_das_alamandas|20|vila_swevia




lista2.txt
abel|10_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.75|sv2_meuclic|groove_52hpn
acelho|4_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.83|farm_meuclic|groove_52hpn
adailton|6_megas_residencial_urbano|roteador_parque_america_new|pppoe|172.17.20.58|parqueamerica_cabeado|cx3_setor4
adriananunes|6_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.14|sva_meuclic|groove_52hpn
adriano|4_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.156||
agnaldo|6_megas_residencial_urbano|roteador_parque_america_new|pppoe|172.17.20.62|parqueamerica_cabeado|cx2_setor3
ailton|2_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.73|cda_meuclic|rb_sxt_lite2
ailtondomingos|10_megas_residencial_urbano|roteador_parque_america_new|pppoe|172.17.20.66|parqueamerica_cabeado|cx2_setor3
airtondimas|4_megas_residencial_urbano|roteador_parque_america_new|pppoe|172.17.20.109|parqueamerica_cabeado|cx4_setor4
alberto|4_megas_residencial_urbano|roteador_parque_america_new|pppoe|172.17.20.21|parqueamerica_cabeado|cx5
albertowerner|4_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.130|suevia_cabeado|cabeado
alemao|10_megas_residencial_urbano|rb_servidor_pppoe|ipxmac|10.0.0.6|mg_meuclic|groove_52hpn
alessandra|4_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.114|adi_meuclic|groove_52hpn
alexandre|8_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.42|sva_meuclic|groove_52hpn
alexsandro|6_megas_residencial_urbano|roteador_parque_america_new|pppoe|172.17.20.97|parqueamerica_cabeado|cx1_setor3
amauri|4_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.96|suevia_cabeado|cabeado
anderson|4_megas_residencial_urbano|roteador_parque_america_new|pppoe|172.17.20.5|parqueamerica_cabeado|cx4_setor1
andersonalex|6_megas_empresarial_urbano|roteador_parque_america_new|pppoe|172.17.20.87|parqueamerica_cabeado|cx3_setor2
andersonsimioni|6_megas_residencial_urbano|roteador_parque_america_new|pppoe|172.17.20.116|parqueamerica_cabeado|cx3_setor4


queria que a lista3 ficasse assim:

abel_velasco_zeballos|abel|alameda_catxere|200|condominio_chapadaabel|10_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.75|sv2_meuclic|groove_52hpn

acelho_de_azevedo_pereira|acelho|al._dos_eucaliptos|955|condominio_farmacelho|4_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.83|farm_meuclic|groove_52hpn

etc...






12. Re: concatenar por nomes

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 31/01/2017 - 11:07h

baixinho930 escreveu:

msoliver escreveu:

baixinho930 escreveu:

Ola tudo bem, tenho uma duvida pode me ajudar.

Tenho 2 arquivos lista1.txt e lista2.txt com algumas linhas ex:

lista1.txt

daniel_29anos_branco
julio_22anos_azul
tulio_38anos_amarelo

lista2.txt
julio_caixa4_144
andre
tulio_caixa9_89
joao
daniel_caixa71_76
paulo


Gostaria de saber se existe um comando para recortar as linhas da lista2.txt e adicionar na lista1.txt ficando assim:

lista1.txt

daniel_29anos_branco daniel_caixa71_76
julio_22anos_azul julio_caixa4_144
tulio_38anos_amarelo tulio_caixa9_89

adicionar pelo mesmo nome na mesma linha seria possivel ?

Grato.



Boa tarde Baixinho, verifique se atende a sua necessidade . . .
while IFS="_" read -r C1 C2 C3;do
if egrep "$C1" lista02 > lista.tmp;then
echo "${C1}_${C2}_${C3} $(cat lista.tmp)" >> lista03;fi
done<lista01



marcelo oliver


não consegui bom para facilitar irei colocar como esta a lista1 e lista2 dos meus arquivos

lista1.txt
abel_velasco_zeballos|abel|alameda_catxere|200|condominio_chapada
acelho_de_azevedo_pereira|acelho|al._dos_eucaliptos|955|condominio_farm
adailton_izidoro|adailton|rua_maria_aparecida_clementino|189|parque_américa
adriana_villas_boas_nunes|adriananunes|alameda_das_sibipirunas|0|vila_swevia
agnaldo_faria_de_menezes|agnaldo|rua_maria_diggroco_cavacchini|51|parque_américa
agua_boa_dugri_ltda|agua|rodovia_prefeito_hilario|10|pedregulho
ailton_domingos_da_silva|ailtondomingos|rua_damião_gonçalves_da_silva|58|parque_américa
ailton_josé_pedrosa|ailton|perobas|5|condominio_farm
aírton_da_silva_dimas|airtondimas|rua_suriname|198|parque_américa
alberto_silveira_neto|alberto|rua_suriname|281|parque_américa
alberto_werner_holzer|albertowerner|alameda_das_quaresmeiras|2|vila_swevia
alessandra_mesa_herrera|alessandra|estrada_do_butuxim|0|altos_de_itu
alex_sandro_pedro_da_cunha|alexsandro|rua_havana|30|parque_américa
alexandre_martinez_milla|alexandre|alameda_das_sibipirunas|0|vila_swevia
amauri_da_silva|amauri|alameda_das_alamandas|20|vila_swevia

lista2.txt
abel|10_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.75|sv2_meuclic|groove_52hpn
acelho|4_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.83|farm_meuclic|groove_52hpn
adailton|6_megas_residencial_urbano|roteador_parque_america_new|pppoe|172.17.20.58|parqueamerica_cabeado|cx3_setor4
adriananunes|6_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.14|sva_meuclic|groove_52hpn
adriano|4_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.156||
agnaldo|6_megas_residencial_urbano|roteador_parque_america_new|pppoe|172.17.20.62|parqueamerica_cabeado|cx2_setor3
ailton|2_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.73|cda_meuclic|rb_sxt_lite2
ailtondomingos|10_megas_residencial_urbano|roteador_parque_america_new|pppoe|172.17.20.66|parqueamerica_cabeado|cx2_setor3
airtondimas|4_megas_residencial_urbano|roteador_parque_america_new|pppoe|172.17.20.109|parqueamerica_cabeado|cx4_setor4
alberto|4_megas_residencial_urbano|roteador_parque_america_new|pppoe|172.17.20.21|parqueamerica_cabeado|cx5
albertowerner|4_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.130|suevia_cabeado|cabeado
alemao|10_megas_residencial_urbano|rb_servidor_pppoe|ipxmac|10.0.0.6|mg_meuclic|groove_52hpn
alessandra|4_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.114|adi_meuclic|groove_52hpn
alexandre|8_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.42|sva_meuclic|groove_52hpn
alexsandro|6_megas_residencial_urbano|roteador_parque_america_new|pppoe|172.17.20.97|parqueamerica_cabeado|cx1_setor3
amauri|4_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.96|suevia_cabeado|cabeado
anderson|4_megas_residencial_urbano|roteador_parque_america_new|pppoe|172.17.20.5|parqueamerica_cabeado|cx4_setor1
andersonalex|6_megas_empresarial_urbano|roteador_parque_america_new|pppoe|172.17.20.87|parqueamerica_cabeado|cx3_setor2
andersonsimioni|6_megas_residencial_urbano|roteador_parque_america_new|pppoe|172.17.20.116|parqueamerica_cabeado|cx3_setor4


queria que a lista3 ficasse assim:

abel_velasco_zeballos|abel|alameda_catxere|200|condominio_chapadaabel|10_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.75|sv2_meuclic|groove_52hpn

acelho_de_azevedo_pereira|acelho|al._dos_eucaliptos|955|condominio_farmacelho|4_megas_residencial_urbano|rb_servidor_pppoe|pppoe|172.16.20.83|farm_meuclic|groove_52hpn

etc...


Bom dia Baixinho.
É "NORMAL" não ter dado certo . . .
O SEPARADOR e a quantidade de CAMPOS são diferentes dos que vc citou na 1ª postagem . . .

A lógica é a mesma, só adaptei para o novo IFS e o Nº de CAMPOS
while IFS="|" read -r C1 C2 C3 C4 C5;do
if egrep "^$C2" lista02 > lista.tmp;then
echo "${C1}|${C2}|${C3}|${C4}|${C5} $(cat lista.tmp)" >> lista03;fi
done<lista01







01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts