Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:programmation:bash:read:parcourir-fichier-texte [09/07/2007 03:32] mattux créée |
doc:programmation:bash:read:parcourir-fichier-texte [25/09/2015 19:20] paskal [Script] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Lire un fichier ligne par ligne ====== | + | ====== read file ====== |
- | Si vous désirez lire avec un Script Shell (bash), un fichier texte, ligne par ligne, voici le code à utiliser : | + | * Objet : script bash read file |
+ | * Niveau requis :{{tag>débutant avisé}} | ||
+ | * Commentaires : //Lire un fichier ligne par ligne// | ||
+ | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !]] :-) | ||
+ | * Suivi : {{tag>à-tester}} | ||
+ | * Création par [[user>mattux]] le 09/07/2007 | ||
+ | * Testé par .... le .... | ||
+ | * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?pid=116004#p116004 |C'est ici]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | ||
+ | |||
+ | |||
+ | |||
+ | ===== Script ===== | ||
+ | |||
+ | Script Shell (bash, zsh, ksh, dash,...), pour lire un fichier texte, ligne par ligne : | ||
+ | <code bash read-file.sh> | ||
+ | #variable du fichier | ||
+ | fichier="test.txt" | ||
- | <code> | ||
#initialisation du compteur | #initialisation du compteur | ||
- | x=0 | + | i=0 |
- | #initialisation de la boucle | + | while IFS= read -r ligne; do |
- | while [ $x -lt $(wc -l <$file) ] | + | |
- | do | + | |
- | #incrémentation du compteur | + | #traitement des lignes 1 et 2 |
- | x=$(($x+1)) | + | if [ "$i" -eq 1 ]; then |
+ | echo "Nom: $ligne" | ||
+ | elif [ "$i" -eq 2 ]; then | ||
+ | echo "Prénom: $ligne" | ||
+ | fi | ||
+ | |||
+ | # incrementation du compteur | ||
+ | i=$(($i+1)) | ||
- | #récupération de la ligne | + | done < "$fichier" |
- | ln=$(head -n $x $file | tail -n 1) | + | |
- | #traitement des lignes 1 et 2 | + | exit 0</code> |
- | if [ $x -eq 1]; then | + | |
- | echo "Nom: " $ln | + | |
- | elif [ $x -eq 2]; then | + | |
- | echo "Prénom:" $ln | + | |
- | fi | + | |
- | done | + | <note>Le fichier ''test.txt'' doit exister dans le même répertoire que le script</note> |
- | exit 0 | + | ===== Explication ===== |
- | </code> | + | |
- | Si le fichier test.txt indiqué dans l'exemple contiendrait : | + | Cette méthode est simple, efficace et __correcte__. |
+ | |||
+ | ==== Commande ==== | ||
+ | |||
+ | <code user>IFS= read -r</code> | ||
+ | |||
+ | === Options === | ||
+ | |||
+ | IFS (Internal Field Separator) | ||
+ | |||
+ | C'est une variable spéciale de votre shell. \\ | ||
+ | Avec elle, quand votre ligne contient des caractères //blancs//((espaces, tabulations)), **read** les supprime au début et à la fin, avant de placer le résultat dans **ligne**. | ||
+ | |||
+ | Entrez la ligne de commande suivante pour visualiser le contenu de la variable ''IFS'' utilisée par votre interpréteur de commande. | ||
+ | <code user>set | grep IFS</code> | ||
+ | === read -r === | ||
+ | |||
+ | read avec option -r, sinon les backslashes (**\**) seront interprétés, or nous voulons conserver le contenu du fichier intact. | ||
+ | |||
+ | ===== Exemple ===== | ||
+ | |||
+ | Le contenu du fichier ''test.txt'' utilisé dans cet l'exemple est : | ||
<code>Dark | <code>Dark | ||
TUX</code> | TUX</code> | ||
- | Lors de l'exécution du script, on aurait à l'écran : | + | Lors de l'exécution du script, on aura à l'écran : |
<code>Nom : Dark | <code>Nom : Dark | ||
Prénom: TUX</code> | Prénom: TUX</code> | ||
- | + | Bien entendu, vous pouvez modifier le script selon vos besoins. | |
- | Bien entendu, vous devrez modifier le code selon vos besoins. | + |