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 22/12/2007, 19h14   #1
En attente de confirmation mail
 
Étudiant
Inscription : août 2007
Messages : 419
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2007
Messages : 419
Points : 214
Points : 214
Envoyer un message via ICQ à acacia Envoyer un message via MSN à acacia Envoyer un message via Yahoo à acacia
Par défaut Répertoire avec linux

Bonsoir,

j'aurai encore besoin d'un coup de main sur linux, please

on se trouve par défaut dans /bin/local/message/

et on a le fichier /bin/local/message/passwd décrivant l'ensemble des utilisateurs identifiés sur un système linux

puis on nous demande de réaliser une copie de celui-ci vers un autre intitulé liste dans le répertoire /usr/local/resultat

le fichier /usr/local/resultat/liste (crée par copie) contient les informations suivantes:

jean: x:200:100:Jean DUFEU:/home/jean:/bin/ksh
yves: x:209:300:Yves DUPONT:/home/yves:/bin/sh
....
....
....
(il y a 6 lignes)

Ce fichier est constitué de 6 lignes (enregistrement), chacune d'elles étant découpées en plusieurs champs dont le caractère de séparation est ":"

alors pour faire la copie j'ai fait:

cp /bin/local/message/passwd /usr/local/resultat/liste

et ce que je ne comprends pas aussi dans la question, est ce que les 6 lignes je dois les rajouter à la copie ou c'est aussi le premier fichier qui les contient?

puis on nous demande de remplacer le caractère séparateur ":" par le séparateur de champ "Z" et le résultat de cette modification doit être produit dans le fichier /usr/local/resultat/liste_remplace qui doit se présenter comme suit:

jeanZxZ200Z100ZJean DUFEUZ/home/jeanZ/bin/ksh
yvesZxZ209Z300ZYves DUPONTZ/home/yvesZ/bin/sh
....
....
....

là je n'ai pas su comment faire

Merci de m'aider.
acacia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2007, 19h24   #2
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 8 743
Détails du profil
Informations personnelles :
Âge : 54

Informations forums :
Inscription : janvier 2007
Messages : 8 743
Points : 9 978
Points : 9 978
encore une fois sed est ton ami...

Code :
cat /usr/local/resultat/liste | sed "s+:+Z+g" > /usr/local/resultat/liste_remplace
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java

Je ne réponds pas aux MP techniques
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2007, 19h36   #3
En attente de confirmation mail
 
Étudiant
Inscription : août 2007
Messages : 419
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2007
Messages : 419
Points : 214
Points : 214
Envoyer un message via ICQ à acacia Envoyer un message via MSN à acacia Envoyer un message via Yahoo à acacia
merci

et est-ce que le premier fichier contient les enregistrement ou est-ce que je dois les rajouter?

je bloque sur une autre question aussi, comment on peut réduire le contenue d'un fichier, par exemple dans la question posée dans cet exercice, on nous demande d'appliquer les instructions nécessaires à la production d'un autre fichier /usr/local/resultat/liste_reduite contenant seulement deux lignes à partir du fichier /usr/local/resultat/liste_remplace ??
acacia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2007, 12h51   #4
Membre habitué
 
Inscription : janvier 2007
Messages : 148
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 148
Points : 145
Points : 145
Tu dois prendre 2 lignes au pif ?

Y'a une commande qui s'appel head qui prend un echantillon du début d'un flux, tu as aussi la commande tail qui prend un echantillon de la fin d'un flux.

Donc pour récupérer les deux premières ligne tu peux faire :

Code :
1
2
 
head -n2 /usr/local/resultat/liste_remplace > /usr/local/resultat/liste_reduite
Voir le man au pire
Delwyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2007, 19h09   #5
En attente de confirmation mail
 
Étudiant
Inscription : août 2007
Messages : 419
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2007
Messages : 419
Points : 214
Points : 214
Envoyer un message via ICQ à acacia Envoyer un message via MSN à acacia Envoyer un message via Yahoo à acacia
Merco Delwyn pour la réponse

les deux lignes que je dois mettre dans le fichier_réduit se trouvent au milieu

CSPLIT ne fait pas ça?

y a t-il un moyen de prendre seulement une partie de la ligne?

ex:


dans le fichier original:

jean: x:200:100:Jean DUFEU:/home/jean:/bin/ksh

dans un autre fichier:

Jean DUFEU/bin/ksh

acacia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2007, 21h53   #6
Membre habitué
 
Inscription : janvier 2007
Messages : 148
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 148
Points : 145
Points : 145
Pour récupérer les lignes du milieu sur un fichier de 6 lignes, ca voudrait dire qu'il te faut les lignes 3 et 4.

On pourrait dire que ce sont les deux dernière lignes, des 4 première lignes non ? =)

Ensuite pour ce qui est de récupérer les 3 champs, tu n'as pas du chercher beaucoup, le fichier passwd est souvent utiliser pour l'exemple.

Mais je pense qu'un :
devrait arranger ca

Je te renvoie par la
Delwyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2007, 22h04   #7
En attente de confirmation mail
 
Étudiant
Inscription : août 2007
Messages : 419
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2007
Messages : 419
Points : 214
Points : 214
Envoyer un message via ICQ à acacia Envoyer un message via MSN à acacia Envoyer un message via Yahoo à acacia
Bonsoir,

Merci beaucoup pour les réponse.

Citation:
Envoyé par Delwyn Voir le message
Pour récupérer les lignes du milieu sur un fichier de 6 lignes, ca voudrait dire qu'il te faut les lignes 3 et 4.

On pourrait dire que ce sont les deux dernière lignes, des 4 première lignes non ? =)
est-ce que je dois faire au moins deux fichiers pour avoir les deux lignes du milieu? ou est-ce que je pourrai combiner head et tail ?
acacia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2007, 22h50   #8
Membre habitué
 
Inscription : janvier 2007
Messages : 148
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 148
Points : 145
Points : 145
Tu peux faire le tout en une seul opération via des pipe, qui redirige les flux output d'une commande vers l'input d'une autre.
Code :
1
2
 
cat monfichier | head -n4 | tail -n2 > mon_nouveaufichier
Ce qui signifi :

la commande cat affiche tout le fichier à l'écran grace au pipe | plutot que d'aller vers l'ecran (sortie standard, output) je redirige cette sortie en entré standard (inpput) de la commande head -n4 qui va a son tour afficher les 4 premieres ligne du flux recu, pour les envoyer vers la commande tail -n2 qui va prendre les deux dernières ligne du flux recu ( soit les 4 premieres ligne ). Enfin on redirige le flux vers un fichier via > , ce qui ecrase le fichier existant, >> aurait ajouté les ligne en fin de fichier si celui-ci existait, ou l'aurait créé s'il n'existait pas.
Delwyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2007, 23h02   #9
En attente de confirmation mail
 
Étudiant
Inscription : août 2007
Messages : 419
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2007
Messages : 419
Points : 214
Points : 214
Envoyer un message via ICQ à acacia Envoyer un message via MSN à acacia Envoyer un message via Yahoo à acacia
Citation:
Envoyé par Delwyn Voir le message
Tu peux faire le tout en une seul opération via des pipe, qui redirige les flux output d'une commande vers l'input d'une autre.
Code :
1
2
 
cat monfichier | head -n4 | tail -n2 > mon_nouveaufichier
Ce qui signifi :

la commande cat affiche tout le fichier à l'écran grace au pipe | plutot que d'aller vers l'ecran (sortie standard, output) je redirige cette sortie en entré standard (inpput) de la commande head -n4 qui va a son tour afficher les 4 premieres ligne du flux recu, pour les envoyer vers la commande tail -n2 qui va prendre les deux dernières ligne du flux recu ( soit les 4 premieres ligne ). Enfin on redirige le flux vers un fichier via > , ce qui ecrase le fichier existant, >> aurait ajouté les ligne en fin de fichier si celui-ci existait, ou l'aurait créé s'il n'existait pas.
Merci merci beaucoup.
acacia 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 11h38.


 
 
 
 
Partenaires

Hébergement Web