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 :

Traiter chaque ligne du résultat d'une commande


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2003
    Messages
    245
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 245
    Points : 106
    Points
    106
    Par défaut Traiter chaque ligne du résultat d'une commande
    Bonjour,

    J'ai un petit souci de débutant, dans un script shell.

    J'ai écrit une commande permettant de lister les identifiants des sémaphores utilisés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ipcs -s | tail +4 | tr -s " " | cut -d " " -f 2
    J'aimerais maintenant détruire ces sémaphores à l'aide de la commandeIl faut donc que je récupère chaque ligne de la commande ipcs pour pouvoir la traiter avec ipcrm.

    J'ignore comment faire. Merci de votre aide.

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2003
    Messages
    245
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 245
    Points : 106
    Points
    106
    Par défaut
    J'ai bien une idée :

    Compter le nombre de lignes ;
    Pour chaque ligne :
    - récupérer l'identifiant ;
    - détruire ;


    N'y a-t-il pas plus simple ?

    Question subsidiaire :
    quelle commande unix pour supprimer les N dernières lignes d'un fichier ? La commande head ne me convient pas car elle impose de savoir combien il y a de lignes avant celles à supprimer.

  3. #3
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Citation Envoyé par 84mickael
    J'ai bien une idée :

    Compter le nombre de lignes ;
    Pour chaque ligne :
    - récupérer l'identifiant ;
    - détruire ;


    N'y a-t-il pas plus simple ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in `bla bla`; do pouet; done

    Question subsidiaire :
    quelle commande unix pour supprimer les N dernières lignes d'un fichier ? La commande head ne me convient pas car elle impose de savoir combien il y a de lignes avant celles à supprimer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e :a -e '$d;N;2,xxxxba' -e 'P;D' -i mon_fichier
    Tu remplaces xxxx par le nombre de lignes que tu veux virer (tu peux utiliser une variable, man sed )
    Si tu ne veux pas modifier le fichier source, mais juste récupérer la sortie de la commande, tu retires le -i final de la commande

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2003
    Messages
    245
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 245
    Points : 106
    Points
    106
    Par défaut
    Ca fonctionne !

    Je voulais supprimer la dernière ligne (vide) générée par la commande, mais il semblerait que la boucle for ne la prend pas en compte. Ca n'a donc pas été nécessaire... ce qui m'arrange un peu car cette commande sed est des plus étranges !

    Voici donc mon modeste script shell qui supprime les sémaphores et les mémoires après exécution d'un programme producteur/consommateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for i in `ipcs -s | tail +4 | tr -s " " | cut -d " " -f 2`
    do
    	`ipcrm -s $i`
    done
     
    for i in `ipcs -m | tail +4 | grep -v 0x00000000 | tr -s " " | cut -d " " -f 2`
    do
    	`ipcrm -m $i`
    done
    Merci.

  5. #5
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    Bon 7 mois apres, ok
    mais je suis tombé dessus en cherchant un truc a propos des sémaphores.
    Bon je ne connais pas la version du tail utilisé ci dessus, mais pour la 5.97 il est recomander
    de mettre plutôt tail -n +number au lieu de tail +number

    Bon sinon voici une autre version de ce code fort utile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for i in `ipcs -s | tail -n +4 | tr -s " " | cut -d " " -f 2`
    do
    	`ipcrm -s $i`
    done
     
    for i in `ipcs -m | tail -n +4 | grep -v 0x00000000 | tr -s " " | cut -d " " -f 2`
    do
    	`ipcrm -m $i`
    done

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Points : 34
    Points
    34
    Par défaut Supprimer les dernieres lignes d'un fichier en shell
    Félicitation pour cette magnifique commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e :a -e '$d;N;2,xxxxba' -e 'P;D' -i mon_fichier
    ou xxxx est le nombre de lignes à supprimer.
    Je n'ai pas encore complètement compris l'opération grâce à "man sed".
    Mais c'est vraiment beau.
    Encore bravo.
    Ce qui est étonnant c'est que le besoin est trivial, et qu'il n'y a pas, semble t'il, de solution plus simple.
    A noter que le tail -r (reverse) qui permettrait aussi de répondre au besoin, n'est pas compatible linux.
    Raphael

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/07/2013, 22h59
  2. Traiter ligne par ligne le résultat d'une requête
    Par pupucette dans le forum PL/SQL
    Réponses: 40
    Dernier message: 22/05/2012, 14h31
  3. Réponses: 8
    Dernier message: 04/07/2011, 14h16
  4. traiter le résultat d'une commande
    Par aroua dans le forum Général Java
    Réponses: 2
    Dernier message: 18/04/2008, 11h51
  5. Ecrire le résultat d'une commande dans un fichier de l' OS
    Par Labienus dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/02/2004, 11h04

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