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 [22/09/2013 23:31] 127.0.0.1 modification externe |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Lire un fichier ligne par ligne ====== | + | ====== readfile ====== |
- | Si vous désirez lire avec un Script Shell (bash), un fichier texte, ligne par ligne, voici le code à utiliser : | + | Lire un fichier ligne par ligne |
+ | |||
+ | ===== Script ===== | ||
+ | |||
+ | Script Shell (bash, zsh, ksh, dash,...), pour lire un fichier texte, ligne par ligne : | ||
+ | <code bash> | ||
+ | #variable du fichier | ||
+ | fichier="${repertoire}/fichier" | ||
- | <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 | + | ==== Nota : ==== |
- | exit 0 | + | <code> |
- | </code> | + | "${repertoire}/fichier" = "/chemin/du/fichier"</code> |
+ | |||
+ | ===== Explication ===== | ||
+ | |||
+ | Cette méthode est simple, efficace et __correcte__. | ||
+ | |||
+ | ==== Commande ==== | ||
+ | |||
+ | IFS= read -r | ||
+ | |||
+ | === Options === | ||
+ | |||
+ | IFS | ||
+ | |||
+ | 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**. | ||
+ | |||
+ | read -r | ||
+ | |||
+ | read avec option -r, sinon les backslashes (**\**) seront interprétés, or nous voulons conserver le contenudu fichier intact. | ||
+ | |||
+ | ===== Exemple ===== | ||
- | Si le fichier test.txt indiqué dans l'exemple contiendrait : | + | Si le fichier test.txt indiqué dans l'exemple contient : |
<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 devez modifier le code selon vos besoins. | |
- | Bien entendu, vous devrez modifier le code selon vos besoins. | + |