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 :

BASH Amélioration script


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 151
    Par défaut BASH Amélioration script
    Bonjour

    Je cherche des idées pour améliorer (rapidité d'exécution) mon script bash . Il permet de traiter de gros fichiers. Avez vous des idées?
    Le code
    Merci

    Tio

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    Bonjour Tio,

    Citation Envoyé par Tiolebucheron
    Je cherche des idées pour améliorer (rapidité d'exécution) mon script bash
    Tu peux ne pas utiliser :
    echo devant les variables du style ${line:n:m}
    echo $var | sed, mais sed <<<"$var" (qui ne sont d'ailleurs pas indispensables, des remplacements de paramètres successifs de la même variable
    une seule instance de sed : sed 's/anc/nouv/; s/anc2/nouv2/'
    awk | sed : c'est soit awk soit sed, mais pas les deux
    bc pour calculer des entiers
    ::
    bref, limiter au strict minimum l'utilisation de programmes externes.
    -
    les tests depuis $l1 jusqu'à $ville, peuvent réaliser dans une boucle for. Ça ne fera pas ganer de temps mais de l'espace...
    -

    une petite question : à quoi servent tous ces guillemets ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 151
    Par défaut
    Oui en effet il y a matière a améliorer. Mes cours de shel remonte à 10 ans maintenant, un peu rouillé le gars.

    Pour les guillemets une fois qu'une commande fonctionne j'ai reporté la même chose partout. par contre j'ai par trop compris l'histoire du for!!!

    Je serai a mon bureau dans une heure je fais dejà les premières modifications et reposte le nouveau code.

    MErci pour l'aide

    tio

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Tiolebucheron Voir le message
    Oui en effet il y a matière a améliorer. Mes cours de shel remonte à 10 ans maintenant, un peu rouillé le gars.
    Le test [ -z "$ville" ] || [ "$ville" = "" ] fait 2 appels. Il vaut mieux le remplacer par un connecteur OR interne => [ -z "$ville" -o "$ville" = "" ]
    Toutetois c'est inutile vu que l'option -z teste variable vide donc l'égalité avec rien est implicite => [ -z "$ville" ] est bien suffisant

    Effectivement tous ces guillemets sont inutiles => ville="'$ville'" marche parfaitement

    Citation Envoyé par Tiolebucheron Voir le message
    par contre j'ai par trop compris l'histoire du for!!!
    Moi on plus. Peut-être un for x in `cat fichier` mais personnellement j'apprécie pas trop cette syntaxe car si le fichier contient des espaces dans ses mots, le for traitera chaque mot avec comme 2 éléments séparés. Je préfère de loin la syntaxe cat fichier |while read x
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 151
    Par défaut
    Re,

    Je rencontre des difficultés pour enlever l'echo de cet commande

    majic3=$(echo "${line:18:6}" | sed -e 's/[[:blank:]]*$//')

    Pouvez-vous m'aider?

    Merci

    PS : 2 seconde de gagner déjà (sur un test de 80 lignes traitées)

  6. #6
    Membre expérimenté Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Par défaut
    Citation Envoyé par Tiolebucheron Voir le message
    Re,
    majic3=$(echo "${line:18:6}" | sed -e 's/[[:blank:]]*$//')
    Si la variable ne contient pas d'espaces, peut-être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    majic3=${line:18:6}; majic3=${majic3%% *}

Discussions similaires

  1. Besoin d'aide pour script bash : amélioration
    Par stabo dans le forum Shell et commandes GNU
    Réponses: 11
    Dernier message: 25/05/2012, 13h31
  2. Export de variable d'un script bash à un script perl
    Par neg12 dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 09/03/2011, 20h45
  3. [débutant] [BASH] problème script backup
    Par julien.63 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 13/04/2008, 18h56
  4. Problème de script Bash dans script Perl
    Par Aviator dans le forum Langage
    Réponses: 3
    Dernier message: 03/01/2008, 20h50

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