Concatenação de arquivos por condição [RESOLVIDO]

1. Concatenação de arquivos por condição [RESOLVIDO]

João Paulo Carneiro
jptudobem

(usa Debian)

Enviado em 04/01/2012 - 12:31h

Salve, estou com uma zica aqui e não tenho nem idéia de como começar. Preciso concatenar dois e talvez futuramente mais arquivos por condições. Vou exemplificar para ficar mais fácil:

Arquivo 1:

192.168.200.100 AA:AA:AA:AA:AA:AA
192.168.200.102 AA:AA:AA:AA:AA:AB
192.168.200.106 AA:AA:AA:AA:AA:AC
192.168.200.111 AA:AA:AA:AA:AA:AD
192.168.200.113 AA:AA:AA:AA:AA:AE

Arquivo 2:

192.168.200.100 usuario1
192.168.200.102 usuario2
192.168.200.106 usuario3
192.168.200.111 usuario4
192.168.200.113 usuario5

Então, se o ip contido no arquivo 2, tiver no arquivo 1, colocar o usuário referente na terceira coluna do arquivo 1, ficando assim:

Arquivo 3:

192.168.200.100 AA:AA:AA:AA:AA:AA usuario1
192.168.200.102 AA:AA:AA:AA:AA:AB usuario2
192.168.200.106 AA:AA:AA:AA:AA:AC usuario3
192.168.200.111 AA:AA:AA:AA:AA:AD usuario4
192.168.200.113 AA:AA:AA:AA:AA:AE usuario5

-------

Esse é só um dos nós da corda, desafazê-los um de cada vez fica mais fácil. hehehe

Valeu pela ajuda.





  


2. MELHOR RESPOSTA

marcelo guatura barbosa da silva
mguatura

(usa Debian)

Enviado em 05/01/2012 - 10:57h

pronto ta aqui o script que voce ta precisando, da uma olhada se atende realmente a sua necessidade.

ele funciona independente da quantidade de linhas que o arquivo tenha e ira criar um novo arquivo da maneira que voce especificou na postagem, qualquer duvida so postar ai.

E se tiver tudo certo altera para resolvido.

#!/bin/ksh
rm -f arquivo3.txt
touch arquivo3.txt

arquivo1=`cat arquivo1.txt | wc -l`

while [ $arquivo1 -gt 0 ] ; do

linha=`cat arquivo1.txt | head -$arquivo1 | tail -1`
guarda=$linha
ip_arq1=`echo $linha | awk '{print $1}'`

arquivo2=`cat arquivo2.txt | wc -l`

while [ $arquivo2 -gt 0 ] ; do

linha2=`cat arquivo2.txt | head -$arquivo2 | tail -1`
guarda2=$linha2
ip_arq2=`echo $linha2 | awk '{print $1}'`

if [ $ip_arq1 = $ip_arq2 ] ; then
guarda3=`echo $guarda2 | awk '{print $2}'`
echo "$guarda $guarda3" > arquivo3.txt
fi

arquivo2=`echo "$arquivo2-1" | bc`
done

arquivo1=`echo "$arquivo1-1" | bc`

done

3. Re: Concatenação de arquivos por condição [RESOLVIDO]

Marlon Costa
detentosdoeb

(usa Red Hat)

Enviado em 04/01/2012 - 12:39h

Poxa cara.....e facinho fazer isso ai no Excel
No linux nao sei como te dizer mas se no Excel ajudar, me da um toque, e beeeem facil!

Abs!


4. Re: Concatenação de arquivos por condição [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 04/01/2012 - 13:15h

No excel da pra usar um PROCV, se não me engano!
Mas @jptudobem, isso é possível fazer em shell script sim! Vc chegou a iniciar algum raciocínio?
Poste para nós que trabalharemos sua ideia! :-)



5. Re: Concatenação de arquivos por condição [RESOLVIDO]

João Paulo Carneiro
jptudobem

(usa Debian)

Enviado em 04/01/2012 - 13:17h

Preciso de algo que seja em script mesmo.

O problema é esse, não tenho esboço... creio que o caminho será com for, if e awk.


6. Re: Concatenação de arquivos por condição [RESOLVIDO]

João Paulo Carneiro
jptudobem

(usa Debian)

Enviado em 04/01/2012 - 13:21h

Outra coisa.. não necessariamente um ip estará nos dois arquivos, pode ser que esteja no arquivo 1 e nao esteja no arquivo 2 ou vice-versa.




7. Re: Concatenação de arquivos por condição [RESOLVIDO]

marcelo guatura barbosa da silva
mguatura

(usa Debian)

Enviado em 04/01/2012 - 14:35h

Crie alguma logica da maneira que voce quer o script e poste aqui.

Mas uma dica, eu usaria o comando head e tail juntos para trabalhar no arquivo 2 linha por linha.
Mas depende de qual caminho voce quer seguir no seu script obviamente existem outras maneiras.



8. Re: Concatenação de arquivos por condição [RESOLVIDO]

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 04/01/2012 - 14:41h

mas só vai pro arquivo3 se estiver nos dois?


9. Re: Concatenação de arquivos por condição [RESOLVIDO]

João Paulo Carneiro
jptudobem

(usa Debian)

Enviado em 04/01/2012 - 17:58h

Pensei nisso:

arquivo1:

192.168.0.1 AA:AA:AA:AA:AA:AB
192.168.0.2 AA:AA:AA:AA:AA:AC
192.168.0.3 AA:AA:AA:AA:AA:AD

arquivo2:

192.168.0.1 usuario1
192.168.0.2 usuario2
192.168.0.4 usuario3

OBS: Notem que nem tudo que tem no arquivo1 tem no 2 e vice-versa.

Deve-se criar um arquivo final:

192.168.0.1 AA:AA:AA:AA:AA:AB usuario1
192.168.0.2 AA:AA:AA:AA:AA:AC usuario2

O código que venho tentando é:


#!/bin/bash

FILE1="arquivo1.txt"
FILE2="arquivo2.txt"

test -f concatena.tmp2 && rm concatena.tmp[1-2];

for i in `cat $FILE2 | awk '{print $1}'`
do
grep $i $FILE1 | grep -v "^$" | sort -u >> concatena.tmp1
done

for z in `cat concatena.tmp1 | awk '{print $1}'`
do
grep $z $FILE2 | grep -v "^$" | sort -u >> concatena.tmp2
done


cat concatena.tmp2 | awk '{print $2}' > concatena.tmp3
paste concatena.tmp1 concatena.tmp3 > concatena.txt

test -f concatena.tmp3 && rm concatena.tmp[1-3];



10. Re: Concatenação de arquivos por condição [RESOLVIDO]

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 04/01/2012 - 18:32h

Acho que entendi!! Mas usei uma lógica diferente!




#!/bin/bash
FILE1="arquivo1.txt"
FILE2="arquivo2.txt"
FILE3="concatena.txt"
#-------------------------------------------------
cat $FILE1 | while read line
do
ip=`echo $line | awk '{ print $1 }'`
ip_2=`grep $ip $FILE2`
if [ -n "$ip_2" ]; then
echo "$line `echo $ip_2 | awk '{ print $NF }'`" >> $FILE3
fi
done
#------------------------------------fim----------







11. Re: Concatenação de arquivos por condição [RESOLVIDO]

João Paulo Carneiro
jptudobem

(usa Debian)

Enviado em 05/01/2012 - 09:27h

fdmarp escreveu:

Acho que entendi!! Mas usei uma lógica diferente!




#!/bin/bash
FILE1="arquivo1.txt"
FILE2="arquivo2.txt"
FILE3="concatena.txt"
#-------------------------------------------------
cat $FILE1 | while read line
do
ip=`echo $line | awk '{ print $1 }'`
ip_2=`grep $ip $FILE2`
if [ -n "$ip_2" ]; then
echo "$line `echo $ip_2 | awk '{ print $NF }'`" >> $FILE3
fi
done
#------------------------------------fim----------






Começamos bem, porém não deu certo. Na verdade, o número de linhas dos dois arquivos são diferentes, coloquei no exemplo erroneamente o número de linhas iguais, tendo o funcionamento perfeito o seu script.


12. Re: Concatenação de arquivos por condição [RESOLVIDO]

Daniel Lara Souza
danniel-lara

(usa Fedora)

Enviado em 05/01/2012 - 09:32h

será que o sed ajudaria nesse caso ?



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts