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

Linux Discussion :

[SHELL] awk versus cut rapidité


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 66
    Points : 51
    Points
    51
    Par défaut [SHELL] awk versus cut rapidité
    Bonjour,

    J'ai écrit un script super lent et je comptais l'améliorer un peu.
    Je lis sur internet que awk est plus rapide que cut.
    Or dans mon envir. Cygwin, j'obtiens les résultats suivants :
    time cat fichier.csv | cut -f5 -d '' | wc -l
    140

    real 0m0.218s
    user 0m0.045s
    sys 0m0.107s
    time cat fichier.csv | awk '{ print $5 }' | wc -l
    140

    real 0m0.889s
    user 0m0.015s
    sys 0m0.076s
    Est-ce normal ?

    Sinon, si vous avez des idées pour rendre ces lignes de codes plus efficaces (parce que là j'ai honte) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var1=`echo $ligne | cut -d ';' -f2`
    var2=`echo $ligne | cut -d ';' -f3`
    var2_actuel=`grep ^${var1}';' ${chemin}/suivi/fichier.txt | tail -1 | cut -d ';' -f2`
    date_maj_var2_actuel=`grep ^${var1}';' ${chemin}/suivi/fichier.txt | cut -d ';' -f3`
     
    ((cpt=cpt+1))
     
    tableau[$cpt]=`printf "%s %s %s %s %s %s" "${var1}" "${var2}" "${var2_actuel}" "${date_maj}" "${date_autre}"`
    Merci d'avance.

    Rithy

  2. #2
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut
    J'imagine que $ligne est obtenu en faisant un read de ${chemin}/suivi/fichier.txt
    Il manque pas mal d'éléments pour optimiser réellement. Mais tout de même quelques pistes.
    1° Pour un fichier séparé par des ';'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IFS=';'
    while read var0 var1 var2 # et hop ! pas de "cut"
    do
    (...)
    done < ${chemin}/suivi/fichier.txt
    date_maj_var2_actuel=`grep ^${var1}';' ${chemin}/suivi/fichier.txt | cut -d ';' -f3`
    $var1 n'apparaît-il qu'une fois dans le fichier en début de ligne ? Pourrait-on le comparer à var0 dans le code qui précède ?
    Plus de lignes du script seraient les bienvenues... ou un échnatillon représentatif du fichier à lire (en substituant les valeurs confidentielles par d'autres, bien sûr).
    3° Pourquoi printf pour enregistrer des valeurs dans un tableau ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 66
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par fransoo Voir le message
    J'imagine que $ligne est obtenu en faisant un read de ${chemin}/suivi/fichier.txt
    Il manque pas mal d'éléments pour optimiser réellement. Mais tout de même quelques pistes.
    1° Pour un fichier séparé par des ';'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IFS=';'
    while read var0 var1 var2 # et hop ! pas de "cut"
    do
    (...)
    done < ${chemin}/suivi/fichier.txt
    $var1 n'apparaît-il qu'une fois dans le fichier en début de ligne ? Pourrait-on le comparer à var0 dans le code qui précède ?
    Plus de lignes du script seraient les bienvenues... ou un échnatillon représentatif du fichier à lire (en substituant les valeurs confidentielles par d'autres, bien sûr).
    3° Pourquoi printf pour enregistrer des valeurs dans un tableau ?
    J'essaierai d'exposer mieux mon problème demain, là je suis mort.
    Mais merci, je connaissais pas le truc du IFS.

Discussions similaires

  1. [SHELL-AWK] Mixer commande linux + awk
    Par LuffyyffuL dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 10/08/2012, 16h47
  2. Shell + awk sommer des lignes de plusieurs fichiers
    Par erara22 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 23/01/2012, 13h58
  3. [Shell/Awk] Création de fichiers à partir d'un champ
    Par thomas59000 dans le forum Shell et commandes GNU
    Réponses: 16
    Dernier message: 06/05/2011, 15h29
  4. Problème de passage de tableau Shell --> AWK
    Par LestoK dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 22/07/2009, 17h07
  5. [Shell] awk dans une boucle while
    Par Shiva dans le forum Linux
    Réponses: 4
    Dernier message: 22/07/2007, 17h28

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