+ Responder ao Tópico



  1. #1

    Padrão 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?!

  2. #2

    Padrão 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.

  3. #3

    Padrão 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".

  4. #4

    Padrão 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...

  5. #5

    Padrão 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...

  6. #6

    Padrão 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.

  7. #7

    Padrão 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.

  8. #8
    Mameli
    Visitante

    Padrão 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

  9. #9
    marylis
    Visitante

    Padrão 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