Página 1 de 2 12 ÚltimoÚltimo
+ Responder ao Tópico



  1. Pessoal,

    Estou com um problema para executar um script. Tenho um arquivo com várias informações, dentre elas nomes de arquivos. Preciso criar um outro arquivo com os dados extraídos deste quando parte do nome na listagem conter 00000001.erg. Então fiz o seguinte script:

    Código :
    for a in $(cat arquivo.txt | tr -d " "); do
        if [ $(echo $a | cut -d "-" -f8) = "00000001.erg" ]; then
            echo $a >> resultado.txt
        fi
    done
    Só que me parece que há algum erro na hora do teste pelo if, pois ele não retorna nenhuma linha. Quando rodo somente o for e apenas o comando echo $a | cut -d "-" -f8 ele traz em algumas linhas o texto que coloco no if (00000001.erg).

    Código :
    for a in $(cat arquivo.txt | tr -d " "); do
        echo $a | cut -d "-" -f8
    done
    Há alguma coisa de errado no primeiro script para que ele não esteja retornando nenhuma linha?

  2. Tente usar o case:
    É muito útil para encontrar padrões (e muito mais fácil que fazer isso com if).

    Código :
    for a in $(cat arquivo.txt | tr -d " "); do
        case $a in
            *00000001.erg*)
                echo $a >> resultado.txt
            ;;
            *)
                # se nenhuma das anteriores faça isso
                # (equivale ao else do if)
            ;;
        esac
    done
    Se em $a tiver "alguma-coisa_00000001.erg_outra-coisa" ele vai executar o
    comando echo $a >> resultado.txt .
    Se o em $a deve ter exatamente "00000001.erg", retire os asteriscos (que
    significam 'qualquer padrão').
    A opção default [ *) - 'qualquer padrão' ] pode ser retirada sem nenhum
    problema.

    Você pode colocar mais verificações. Mas a primeira que se encaixar será a
    escolhida.
    Então tome cuidado para colocar as verificações em ordem 'correta'.
    Última edição por equantum; 09-09-2010 às 20:47.



  3. Equantum,

    Funcionou muito bem desta forma. Muito obrigado!

    Talvez até em performance foi melhor do que em outros scripts que já fiz, você sabe se o 'case' é realmente mais rápido que o 'if' neste caso?

  4. Na realidade não sei qual é mais rápido.

    Mas ambos tem finalidades diferentes:
    - O case é útil para identificar padrões, onde você conhece (uma parte ou toda)
    a string de entrada
    - O if é usado para verificar se um arquivo ou pasta existe, comparar números,
    se um script ou comando retornou um erro

    Recomendo que você estude um pouco sobre a estrutura case, pois é bastante útil.
    Mas não deixe de usar o if. Ele é importantíssimo para muitas coisas.

    Espero ter ajudado.

    Abraço



  5. Ah... não se preocupe tanto com a velocidade de execução.
    A menos que seja algo realmente lento e que necessite de uma boa otimização,
    preocupe-se mais com a legibilidade do código, indente-o de forma coerente
    e comente a finalidade de cada 'bloco de código'.

    Até mais.






Tópicos Similares

  1. erro no teste do apache
    Por muganga no fórum Servidores de Rede
    Respostas: 4
    Último Post: 28-10-2004, 14:54
  2. Erro no SMTP do qmail
    Por no fórum Servidores de Rede
    Respostas: 6
    Último Post: 29-07-2003, 10:05
  3. erro no dominio do samba
    Por ozzymaia no fórum Servidores de Rede
    Respostas: 20
    Último Post: 20-06-2003, 08:07
  4. Mensagem de erro no logon do Windows98: Parâmetro Inválido
    Por armando no fórum Servidores de Rede
    Respostas: 6
    Último Post: 21-02-2003, 13:32
  5. Erro no "UPGRADE" do kernel
    Por duker no fórum Servidores de Rede
    Respostas: 1
    Último Post: 08-02-2003, 02:33

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L