Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/10/2006, 13h23   #1
Membre régulier
 
Inscription : novembre 2003
Messages : 245
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 245
Points : 72
Points : 72
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 :
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.
84mickael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2006, 13h29   #2
Membre régulier
 
Inscription : novembre 2003
Messages : 245
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 245
Points : 72
Points : 72
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.
84mickael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2006, 13h55   #3
Membre émérite
 
Avatar de Pouic
 
Inscription : octobre 2004
Messages : 668
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2004
Messages : 668
Points : 904
Points : 904
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 :
for i in `bla bla`; do pouet; done
Citation:

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 :
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
__________________
Software becomes slower faster than hardware becomes faster

http://xrenault.developpez.com
API C standard (C ANSI )
Pouic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2006, 14h32   #4
Membre régulier
 
Inscription : novembre 2003
Messages : 245
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 245
Points : 72
Points : 72
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 :
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.
84mickael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 17h32   #5
Membre Expert
 
Avatar de SnakemaN
 
Bidouille-tout Android
Inscription : juillet 2006
Messages : 871
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Bidouille-tout Android

Informations forums :
Inscription : juillet 2006
Messages : 871
Points : 1 102
Points : 1 102
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 :
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
__________________
C'est le signe d'un fou, qu'avoir honte d'apprendre
Ubuntu 10.04 Lucid Lynx @home
LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu
SnakemaN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2008, 14h30   #6
Membre à l'essai
 
Inscription : juin 2004
Messages : 25
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 25
Points : 21
Points : 21
Par défaut Supprimer les dernieres lignes d'un fichier en shell

Félicitation pour cette magnifique commande:
Code :
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
Raphael94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h21.


 
 
 
 
Partenaires

Hébergement Web