Dois arquivos transformados em um só
Pessoal,
Estou com um problema, preciso de algo que já tentei fazer no Excell e não consegui. Resolvi tentar em shell script mas me perdi mais ainda. O problema é o seguinte: tenho dois arquivos assim:
-- arquivo 1 --
xxx1;yyy1
xxx2;yyy2
-- arquivo 2 --
yyy1;www1
yyy2;www2
Como podem ver existem campos coincidentes nos arquivos. O que preciso fazer é encontrar os campos coincidentes e deixa-los todos em um terceiro arquivo em uma unica linha, assim:
xxx1;yyy1;www1
Outro detalhe é que alguns XXX não terão YYY e alguns YYY não terão WWW e portanto alguns campos poderão ficar em branco.
Como posso fazer essa façanha?!
Dois arquivos transformados em um só
Não domino shell script, mas vou te dar a linha de raciocínio que eu acho que resolve teu problema.
Vc deverá ter dois while aninhados. Ou seja, um dentro do outro.
Cada um vai ser controlado por um dos arquivos.
Então dentro do primeiro while vc simplismente obtem o valor que deverá ser pesquisado dentro do próximo arquivo, no segundo vc deve ter um if, comparando se foi encontrado ou não, quando for encontrado o valor do primeiro arquivo no segundo vc "recorta" os outros campos, ou seja, tira os ponto e virgula e concatena cada valor na ordem desejada, fazendo isso até o final do while.
Não sei se fui claro, ou talvez ñ entendi certo o q vc precisa, mas acho que com essa lógica vai ser só passar pra linguagem que vc deseja.
Dois arquivos transformados em um só
Tente Perl ?? bash fica meio saco de fazer muitas viagens, as vezes nao da para fazer e quando da fica "monstro".
Dois arquivos transformados em um só
Citação:
Postado originalmente por mistymst
Tente Perl ?? bash fica meio saco de fazer muitas viagens, as vezes nao da para fazer e quando da fica "monstro".
Perl? Amem... Agora sim. Me indica um site que tenha alguma dica sobre isso?
Como eu disse até o Excell faz isso, mas o problema tá na ordem de colocação dos dados, eu não consegui deixar as celulas aparecendo corretamente...
Dois arquivos transformados em um só
Os campos que podem ser repetidos nos dois arquivos são um só?
Tipo.. o unico que pode repetir é o yyy? todos os yyy de cada arquivo sao exclusivos ou podem duplicar?
Fiz algu parecido em ShellScript, onde eu pegava a primeira coluna, pegava linha por linha e percorria outro arquivo de texto procurando um nome igual, ao encontrar juntava ambos noutro arquivo...
Dois arquivos transformados em um só
tipo ordena os arquivos com sort a principio, abre eles para leitura, ambos, a primeira linha do arquivo sera comparada com as linhas do outro arquivo ate chegar no final, e assim por diante, caso seja igual escreve em um outro arquivo, a partir dai rodando no while ate acabar o primeiro arquivo, acho que com isso voce consegue, algumas funcoes que vai precisar em perl eh: split para separar as linhas e open para abrir arquivos e os <> para os file descriptors... rapido voce faz isso, acho que em umas 20 linhas de codigo.
Dois arquivos transformados em um só
Citação:
Postado originalmente por Jim
Os campos que podem ser repetidos nos dois arquivos são um só?
Tipo.. o unico que pode repetir é o yyy? todos os yyy de cada arquivo sao exclusivos ou podem duplicar?
Fiz algu parecido em ShellScript, onde eu pegava a primeira coluna, pegava linha por linha e percorria outro arquivo de texto procurando um nome igual, ao encontrar juntava ambos noutro arquivo...
Jim,
Na verdade não existe campo unico. O campo YYY pode ter mais de um item no segundo arquivo.
Chega de dicas, que tal a solução?
Bem, não sei se o script abaixo vai resolver seu problema. Ao menos foi o que eu entendi quanto a sua necessidade.
Crie um shell com o nome unifica.sh e utilize o código abaixo.
Qualquer dúvida, mande uma mensagem.
[]s
Mameli
#!/bin/bash
# Unificacao de Arquivos
# by Mameli
if [ $# -lt 3 ]; then
clear
echo Sintaxe correta: unifica.sh \"arq1\" \"arq2\" \"arqunificado\"
echo Sendo o nome do arquivo com extensao e sem usar as aspas
echo .
exit
fi
if [ ! -f $1 ]; then
clear
echo Arquivo $1 nao encontrado
echo .
exit
fi
if [ ! -f $2 ]; then
clear
echo Arquivo $2 nao encontrado
echo .
exit
fi
while read Arq1;
do Col1=`echo $Arq1 | cut -d \; -f 1`
Col2=`echo $Arq1 | cut -d \; -f 2`
if grep $Col2 $2 >/dev/null; then
Col3=`grep $Col2 $2 | cut -d \; -f 2`
echo "$Col1;$Col2;$Col3" >> $3
else echo "$Col1;$Col2;">>$3
fi
done <$1
while read Arq2;
do Col1=`echo $Arq2 | cut -d \; -f 1`
Col2=`echo $Arq2 | cut -d \; -f 2`
if ! grep $Col2 $3 >/dev/null; then
echo ";$Col1;$Col2" >> $3
fi
done <$2
clear
echo Unificacao executada com sucesso !!!!!
echo Gerado arquivo: $3
importar 1 váriavel de um arquivo para
caros,gostaria que me ajudassem a impretar uma variavel por exemplo:
shell a.sh
MYVAR= ola
Shell b.sh
echo "$MYVAR"
ajudem me