Lire un fichier ligne par ligne [shell] - Linux et OS Alternatifs
Marsh Posté le 27-03-2005 à 15:38:05
Pourquoi veut-tu le lire ligne/ligne ?
Tu peux néanmoins essayer:
cat /etc/passwd | tacommande
Marsh Posté le 27-03-2005 à 15:51:06
Bah voila ce que je voudrais faire, dans le fichier /etc/passwd ya le Prenom et le nom de l'utilisateur séparé par un espace, et j'aimerais dans mon script avoir Prénom.nom
Alors quand je fait cat /etc/passwd | cut -f5 -d ":", je récupère bien les noms, mais il me faut encore les relier entre eux, tout les prenoms nom sont séparés par des espaces.
Alros je pensais lire le fichier ligne par ligne, ensuite utiliser cut et hop le tour est joué, mais je ne sais pas comment je pourrais faire ça.
Merci
Marsh Posté le 27-03-2005 à 15:54:29
Mhh... c'est un peu de bidouillage tout ça
si t'arrives à récupérer le champs "NOM Prenom", tu peux faire ça pour avoir les deux:
cut -d" " -f 1 -> Le nom
cut -d" " -f 2 -> Le prenom
soit:
NOM=`cat /etc/passwd | cut -f5 -d ":" | cut -d" " -f 1`.`cat /etc/passwd | cut -f5 -d ":" | cut -d" " -f 2`
Barbare
Ceci dis ça répond pas à ton pb, je sais pas trop comment faire
Marsh Posté le 27-03-2005 à 16:03:06
http://forum.hardware.fr/forum2.ph [...] 0&subcat=0
http://forum.hardware.fr/forum2.php?config=hardwarefr.inc&post=24667&cat=11&cache=&sondage=0&owntopic=0&p=1&trash=0&subcat=0 |
edit: oops ca marche plus
Marsh Posté le 27-03-2005 à 16:50:04
ton "truc" ne marche pas, il me met la liste de "prénom" un point la liste des noms !!!
Marsh Posté le 27-03-2005 à 17:19:47
merci pillow pour ton astuce !!!
et freds45
merci
Marsh Posté le 27-03-2005 à 18:11:19
modifie ton IFS
Marsh Posté le 27-03-2005 à 18:25:24
IFS=" :" |
mais il faut faire attention d'utiliser la bonne valeur pour $IFS dans la suite du script.
Marsh Posté le 27-03-2005 à 18:34:48
mr simon a écrit : ton "truc" ne marche pas, il me met la liste de "prénom" un point la liste des noms !!! |
Citation : [...]et j'aimerais dans mon script avoir Prénom.nom |
Marsh Posté le 27-03-2005 à 22:12:59
lapiou a écrit : while read a |
je pense que le while reagit de la meme facon qu'un for...
Cela veut dire que si dans ta ligne tu as un espace, il va lire la première partie avant l'espace et ensuite une 2ème fois apres l'espace ...
Donc avec des espaces, cela ne lire pas ligne par ligne ....
je ne sais pas si la solution de pillow fonctionne, je ne connais pas la commande tr et je n'ai pas linux sous la main pour faire un man tr
cat /etc/passwd | cut -f5 -d ":" | tr " " .
mais sinon tu as awk qui pourrait t'etre d'un grand secours en utilisant un sed pour supprimer les espaces.
Marsh Posté le 27-03-2005 à 22:24:14
weed a écrit : je pense que le while reagit de la meme facon qu'un for... |
Là c'est le built-in read qui fait tout le travail, et read lit une ligne entière. De plus, si IFS vaut newline , for lit des lignes entières.
Citation : je ne sais pas si la solution de pillow fonctionne, je ne connais pas la commande tr et je n'ai pas linux sous la main pour faire un man tr |
tr remplace un caractère par un autre. tr a b est l'équivalent de sed 's/a/b/g'.
Marsh Posté le 28-03-2005 à 12:13:06
Méthode awk/sed :
cat /etc/passwd |awk -F ":" '{print $5}' |sed 's/ /./'
Marsh Posté le 27-03-2005 à 15:32:08
Bonjour,
dans un script j'ai besoin de lire le fichier /etc/passwd ligne par ligne,
j'ai fait :
for ligne in `cat $FILE`
mais s'il ya un espace dans un ligne, il me "coupe" la ligne en deux.
Comment je peux faire ?
merci