Como juntar arquivos em um só!

1. Como juntar arquivos em um só!

edson silva
lugh

(usa Debian)

Enviado em 05/12/2009 - 07:26h

Pessoal estou precisando de uma ajuda. Tenho dois arquivos, em um, eu tenho os campos Arq1=(user,pass,host) no arquivo Arq2=(user,dir,domain) o Arq 1 é maior que o Arq2 (este é o full do banco ) o outro gerado individualmente de cada maquina. Para isso preciso de um novo arquivo Arq3 com os campos ( user,pass,domain e host) desde que os campos user e host senjam completamentes idênticos.

Exemplos dos arquivos
ARQ1
testeuser | melancia | maquina01
userlascou | passmeferrei | maquina02
testeuser2 | melancia2 | maquina01

ARQ2
"maquina01";"testeuser";"/local/home/testeuser";"abacate.com";"abacate2.com"
"maquina01";"testeuser2";"/local/home/testeuser2";"abacaxi2.com";"abacaxi2.com"

ARQ3 deve ficar
"maquina01";"testeuser";"melancia";"/local/home/testeuser";"abacate.com";"abacate2.com"
"maquina01";"testeuser2";"melancia2";"/local/home/testeuser2";"abacaxi2.com";"abacaxi2.com"




  


2. Solução??

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 05/12/2009 - 12:02h

Achei confuso mas pelo que entendi você tem:

Arquivo 1 : A|B|C
Arquivo 2 : "1";"2";"3";"4";"5"

então se "1" é igual a C e "2" igual a A , a saída será:

"1";"2";"B","3","4","5"

Pelo que entendi saiu isso daqui:
#!/bin/bash

cat ARQ1 |
while read L1
do
A=`echo $L1 | cut -f1 -d '|' | tr ' ' '\ 0'`
B=`echo $L1 | cut -f2 -d '|' | tr ' ' '\ 0'`
C=`echo $L1 | cut -f3 -d '|' | tr ' ' '\ 0'`

A="\"$A\"" ;
B="\"$B\"" ;
C="\"$C\"" ;

cat ARQ2 |
while read L2
do
D=`echo $L2 | cut -f1 -d ';'`
E=`echo $L2 | cut -f2 -d ';'`

[ "$C" != "$D" ] && continue ;
[ "$A" != "$E" ] && continue ;

echo "$L2" | sed "s/;/;$B;/2"
done
done

$ script > ARQ3

OBS: No tr tire o espaço do barra zero (\ 0) [ Parece que o vol não aceita o char nulo]



3. Re: Como juntar arquivos em um só!

Douglas Giorgio Fim
douglas.giorgio

(usa Fedora)

Enviado em 05/12/2009 - 12:28h

eu entendi +-

está assim

Arquivo 1 : A|B|C
Arquivo 2 : "1";"1";"2";"3";"3"

o primeiro 1 eh a maquina
o segundo 1 eh o usuario
o 2 eh o diretorio home
o primeiro 3 eh o host
e segundo 3 tbm eh um host

"A" eh o msm que o "segundo 1"

e por ai vai


ou

.
.
.
.
.
.


Arquivo 1 : A|B|C
Arquivo 2 : "1";"2";"3";"4";"5"

o arquivo 3 tem que ter mais 1

( nomemaquina,user,pass,domain e host)


4. Re: Como juntar arquivos em um só!

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 05/12/2009 - 12:34h

Então, foi esse "ou" aí que você falou que eu entendi.. executei o script e a saída ficou igual ao ARQ3 que ele postou.

Esperar pra ver!

Abraços.


5. Re: Como juntar arquivos em um só!

edson silva
lugh

(usa Debian)

Enviado em 10/12/2009 - 17:01h

Pessoal valeu a ajuda, segue aqui o script que criei pra fazer, só agora to vendo os post de vocês mas valeu mesmo pela força, fiquei o dia todo tentando fazer e nada e dai ante ontem em 1h fiz ele. rsrs

Valeu galera. abraço a todos e espero que isso os ajudem de alguma forma.


#!/bin/bash

arq1="`cat arq1 | cut -d "|" -f1 | sed s/" "//g`"
arq2="`cat arq2 | cut -d "|" -f1 | sed s/" "//g`"
host="linux01"

for i in $arq1; do
let cont++
for d in $arq2; do
if [ $i = "$d" ];
then
host2="`cat -b arq2 | head -n $cont | tail -n 1 | cut -d "|" -f3 | sed s/" "//g`"
if [ $host = "$host2" ]
then
pass="`cat -b arq2 | head -n $cont | tail -n 1 | cut -d "|" -f2 | sed s/" "//g`"
dir="`cat -b arq1 | head -n $cont | tail -n 1 | cut -d "|" -f2 | sed s/" "//g`"
domain="`cat -b arq1 | head -n $cont | tail -n 1 | cut -d "|" -f3 | sed s/" "//g`"
echo $i "|" $pass "|" $dir "|" $domain "|" $host2 >> igual
fi
else
echo $i "diferente" $d >> diferente
fi
done
done







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts