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 :

Utilisation de sed avec une variable


Sujet :

Linux

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    Par défaut Utilisation de sed avec une variable
    Bonjour,

    J'ai la commande suivante pour récupérer la valeur d'une ligne/colonne dans un fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '2p' test | cut -d";" -f2
    Mais je voudrais que les numéros de lignes et de colonnes soient dynamiques (définis par des variables) car je veux utiliser cette commande dans une boucle. En effet je veux pouvoir parcourir les colonnes du fichier et comparer pour chaque colonne les valeurs des lignes 1 et 5 par exemple. Est-ce possible et si oui comment ?

    Y a-t-il une autre solution possible avec awk ?

    J'aimerais également compter le nombre d'occurrences d'une lettre sur une ligne donnée.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Par défaut
    Bonsoir,

    Tu as de la chance, j'ai fais similairement la même chose il y a très peu de temps.

    J'ai défini au préalable une variable $CMDSED qui est égale à la commande que tu vas exécuter.

    Comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    NUMLIGNE=1
    NUMCOLONNE=5
     
    CMDBLOC="sed -n "$NUMLIGNEDEBUT"p fichierAParser | cut -d';' -f$NUMCOLONNE"
     
    RESULTAT=`$CMDBLOC`
    Edit

    Bien sûr, pour plus d'efficacité, je t'invite a en faire une petite fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    # usage : getValue X Y 
    # return : RESULTAT
    getValue()
    {
    LIGNE=$1
    COLONNE=$2
     
    CMDBLOC="sed -n "$LIGNE"p fichierAParser | cut -d';' -f$COLONNE"
    RESULTAT=`$CMDBLOC`
     
    return 0
    }
    Quelque chose dans ce style. Test si le code fonctionne.

    Celà réponds à ta question ?

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    Par défaut
    Cela répond très bien à ma première question. En revanche je n'ai pas trouvé comment compter le nombre d'occurrences d'un caractère sur une ligne.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    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 801
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Gamez29 Voir le message
    Bien sûr, pour plus d'efficacité, je t'invite a en faire une petite fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # usage : getValue X Y 
    # return : RESULTAT
    getValue()
    {
    LIGNE=$1
    COLONNE=$2
     
    CMDBLOC="sed -n "$LIGNE"p fichierAParser | cut -d';' -f$COLONNE"
    RESULTAT=`$CMDBLOC`
     
    return 0
    }
    Si je pige bien ta fonction, tu t'en sers de la façon suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    getValue 5 7
    echo $RESULTAT
    Et si tu veux t'en servir deux fois...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    getValue 5 7
    res1=$RESULTAT
    getValue 12 2
    res2=$RESULTAT
    C'est extrèmement sale de lier une variable interne à un appel externe. Le jour où tu changes de nom de variable, faut que tu regardes partout dans ton code où t'appelles getValue() pour répercuter le changement. C'est contraire à la philosophie de la programmation structurée qui plébiscite l'indépendance des environnements entre les fonctions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # usage : getValue X Y 
    # return : RESULTAT
    getValue()
    {
        sed -n "$1"p fichierAParser | cut -d';' -f$2
        return 0
    }
    Voilà. Ta fonction fait un simple affichage de son résultat. Et si tu veux récupérer son résultat dans une variable, tu fais comme pour tout programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var1=`getValue 1 5`
    var2=`getValue 2 7`
    ...
    Citation Envoyé par Neuromancien2 Voir le message
    Cela répond très bien à ma première question. En revanche je n'ai pas trouvé comment compter le nombre d'occurrences d'un caractère sur une ligne.
    Par exemple compter combien de "z" dans une ligne ? Pas compliqué: tu remplaces tout ce qui n'est pas "z" par rien et tu comptes combien il te reste de lettres...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $ligne |sed -e "s/[^z]//g" |wc -c
    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 averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Par défaut
    Merci Sve@r, j'ai cherché pendant pas mal de temps comment faire pour récupérer une variable d'une fonction sans envoyer une variable interne en externe.

    On en apprends des choses

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    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 801
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Gamez29 Voir le message
    Merci Sve@r, j'ai cherché pendant pas mal de temps comment faire pour récupérer une variable d'une fonction sans envoyer une variable interne en externe.
    Suffit de faire comme pour tout programme. Ta fonction affiche simplement son résultat et tu récupères cet affichage par les backquotes classiques
    Exemple: factorielle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    fact()
    {
        test $1 -le 1 && echo 1                    # Affichage via echo
        expr $1 \* `fact \`expr $1 - 1\``      # Affichage via expr
    }
     
    for i in 1 2 3 4 5
    do
        echo "résultat fact($i)=`fact $i`"
    done
    Tu peux suivre des cours shell Linux ici : http://linux.developpez.com/cours/
    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]

Discussions similaires

  1. Utilisation de getElementById avec une variable
    Par titiyoyo dans le forum jQuery
    Réponses: 2
    Dernier message: 28/09/2009, 23h48
  2. Utilisation de like avec une variable en VBA
    Par mawi dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 11/01/2008, 12h47
  3. [XSLT]comment utiliser xsl:if avec une variable
    Par dbill dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/08/2007, 13h23
  4. Utilisation de sed avec les variables dans un Shell
    Par mbole dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 05/07/2007, 17h46
  5. [XSL] utilisation du mode avec une variable
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 20/04/2006, 10h12

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