recuperer le contenu d'un fichier - Shell/Batch - Programmation
Marsh Posté le 08-08-2008 à 21:37:02
je me répond à moi même, mais si vous avez un meileur code, ca m'interesse. Le traitement ssera plus rapide
Voilà donc ma solution :
#!/bin/sh
FILE=`cat toto.txt`
for X in $FILE
do
Y=`echo $X | cut -d : -f 1`
Z=`echo $X | cut -d : -f 2`
echo "$Y --> $Z"
done
Marsh Posté le 08-08-2008 à 23:25:35
zerros a écrit : je me répond à moi même, mais si vous avez un meileur code, ca m'interesse. Le traitement ssera plus rapide |
Ton code est celui qu'on trouve généralement soi-même au début du shell car on n'a pas l'habitude de manipuler mais il y a des codes bien meilleurs (et entre parenthèses, la variable $FILE est inutile => for X in `cat toto.txt`). Et accessoirement, utiliser des noms de variables significatifs donne de suite un code bien meilleur => for lig in ...
En fait, le problème du for est qu'il découpe ses éléments sur l'espace. Si ton fichier contient des lignes sans espace ça marche sinon ça te coupe les lignes. Donc la solution c'est d'utiliser un truc qui ne prenne pas en compte les espaces. Le meilleur c'est read car lui se cale sur le <return> (et toute ligne finit par un <return> ) en lui demandant de traiter non pas le clavier mais le fichier.
Exemple 1: redirection de l'entrée standard
Code :
|
Exemple 2: envoi des infos via pipe
Code :
|
Exemple 3: création d'un nouveau canal IO
Code :
|
L'avantage de cette soluce est que
1) pas de pipe donc pas de sous-processus (dans l'exemple 2, si t'affiches "$ip" à la fin de la boucle t'auras rien car les variables auront été remplies dans le sous-processus
2) on peut l'étendre pour traiter plusieurs fichiers en parallèle
Code :
|
Marsh Posté le 08-08-2008 à 21:25:32
Bonjour,
J'essai de faire un petit script en shell me permettant de récupérer le contenu d'un fichier dans une variable pour traiter ensuite les données recueillies.
Voilà j'ai un fichier qui contient des adresses ip (toto.txt). Il est formaté de cette façon :
nomduposteclient:adresseipduposteclient
nomduposteclient2:adresseipduposteclient2
nomduposteclient3:adresseipduposteclient3
..
Mon but est de récupérer tout ce qui se trouve à gauche et à droite des : pour ensuite envoyer un ping sur le poste (donc mettre tout ça dans une boucle for).
Le problème, c'est que je suis un fervant utilisateur de la programmation perl. Or dans ce cas ci, je ne peux pas l'utiliser (la fonction que j'essai de coder fait partie d'une application open source
dont toutes les fonctions sont codées en shell).
J'espère que les guru du shelle pourront m'aider.