IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

"Cat" est trop lent (Windows)


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Par défaut "Cat" est trop lent (Windows)
    Bonjour,

    je suis en train d'executer une simple commande de concatenation de fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for file in `ls *.logic`
        do
            cat $file >> final.logic
        done
    Ce code la prend exactement 5 secondes sur une machine Linux, 1min15 sur une machine Windows XP (RAM 3.5G), et 3min30 sur une machine Windows 7 (bien que plus puissante: RAM 8G)

    J'ai essaye de remplacer la commande cat par : type, ou awk mais j'ai toujours pratiquement les meme temps d'execution.

    Je n'ai rien trouve sur le net qui explique la difference qui peut y avoir entre l'utilisation de cat dans des SE differents.

    Qqn a une idee SVP?
    ou au moins une solution pour avoir une performance quasi egale entre Linux et windows?

    Merci

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    pourquoi faire une boucle, qui lancera autant de cat qu'il y a de fichiers ?

    le but de cat est justement de concaténer le contenu de fichers, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat *.logic >> final.logic
    et puis, on ne fait pas for item in $(command); surtout pas ls. parce que
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Citation Envoyé par freestyler Voir le message
    Bonjour,

    Ce code la prend exactement 5 secondes sur une machine Linux, 1min15 sur une machine Windows XP (RAM 3.5G), et 3min30 sur une machine Windows 7 (bien que plus puissante: RAM 8G)

    Merci
    plus puisssant pas vraiment
    pour info la ram ne represente que la quantité de données qui peut y etre stockée sans avoir a faire des copies depuis/vers le disque qui est un périphérique mécanique et par concequent lent.

    deplus 8G de ram lente freinera plus le ressenti que 4 ou meme 2 rapide

    La quantité de ram n'accelere que tres tres tres peu le ressenti utilisateur.
    la comparaisent en seconde est pertinante mais pas la suite de la phrase

    Pour le reste j'allais faire la meme remarque que N_BaH, qui a tout a fait raison

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Par défaut
    En fait j'essayais de reduire la question a l'essentiel..
    En fait voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
            for file in `ls *.logic`
            do
     
                tmp_ext=`grep $(basename $file) list.external`
                if [[ ! -z $tmp_ext ]]; then  
                    cat $file >> external.logic
                    echo >> external.logic
                else            
                    tmp_exc=`grep $(basename $file) list.exclude`
                    if [[ -z $tmp_exc ]]; then
                        cat $file >> final.logic
                        echo >> final.logic
                    fi
                fi
            done
    Ceci explique l'usage de la boucle..

    Par contre, aucun d'entre vous n'a souleve le probleme de la difference des temps d'execution entre SE, qui est la source meme du probleme..

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Par contre, aucun d'entre vous n'a souleve le probleme de la difference des temps d'execution entre SE, qui est la source meme du probleme..
    Désolé, je n'utilise pas Windows.
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
            for file in `ls *.logic`
            for file in *.logic
            do
                tmp_ext=`grep $(basename $file) list.external`
                if [[ ! -z $tmp_ext ]] #ah, bah, non alors ! pas une double négation !
                #if [[ -n $tmp_ext ]]
                if grep "${file##*/}" list.external >/dev/null 2>&1
                then  
                    cat "$file" - >> external.logic
                    echo >> external.logic
                   extFiles+=( "$file" )
                else            
    # la condition opposée est implicite avec le else
                    tmp_exc=`grep $(basename $file) list.exclude`
                    if [[ -z $tmp_exc ]]; then
                        cat "$file" - >> final.logic
                        echo >> final.logic
                    fi
                    finalFiles+=( "$file" )
                fi
            done
    cat "${extFiles[@]}" >> external.logic
    cat "${finalFiles[@]}" >> final.logic
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    j'adore les réponses de N_BaH

    sinon, pour les problèmes de temps de réponse (qui ne sont pas forcément à l'origine du problème), tu utilises quoi sous Windows ? Cygwin ou les versions Windows des coreutils ?

  7. #7
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Par défaut
    Cygwin.

    J'ai aussi essayé d'utiliser Windows Coreutils seulement mais j'ai toujours eu les mêmes problèmes..

Discussions similaires

  1. la vitesse est trop lente
    Par stéphanie123 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 22/05/2008, 13h43
  2. PHP 5 est trop lent.
    Par raphpell dans le forum Langage
    Réponses: 1
    Dernier message: 05/02/2008, 21h24
  3. [HSQLDB] C'est trop lent
    Par Djobird dans le forum JDBC
    Réponses: 5
    Dernier message: 03/07/2007, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo