lecture d'un fichier txt ligne par ligne [Shell] - Shell/Batch - Programmation
Marsh Posté le 03-10-2005 à 11:36:26
Je connais pas awk, c plus simple avec awk de faire ce que je veux faire??
Sinon ce n'est pas la peine j'ai trouvé comment faire
en combinant une boucle while et la commande cat et read
merci
Marsh Posté le 03-10-2005 à 11:41:00
Ben awk est fait pour ça, à la base.
Parce que le souci du while + cat | read, c'est que si tes lignes contiennent des espaces, ta ligne sera vue comme une succession de champs.
Marsh Posté le 03-10-2005 à 11:41:47
axk47 a écrit : Je connais pas awk, c plus simple avec awk de faire ce que je veux faire?? |
Déroutant au début, mais la boucle de lecture du fichier est implicite -> excessivement puissant.
axk47 a écrit : Sinon ce n'est pas la peine j'ai trouvé comment faire |
Ne poste surtout pas ta solution ici.
Comme ça, si qqn cherche à faire la même chose, il n'aura aucune chance de trouver la solution sur ce forum. Il reposera sans doute la même question que toi. S'il agit de la même manière, sans donner sa solution, c'est reparti pour un tour.
Et n'indique pas "résolu" dans le titre.
Et qui perd son temps dans tout ça ? Les bonnes poires qui veulent filer un coup de main sur ce forum.
Après quoi, on dira encore que les habitués sont désagréables.
Merci pour ta "collaboration" et ton "entraide", comme disent ceux qui viennent pomper ici sans jamais donner en retour.
Marsh Posté le 03-10-2005 à 14:16:04
sircam a écrit : Déroutant au début, mais la boucle de lecture du fichier est implicite -> excessivement puissant. |
je pense que la philosophie du forum était de ne pas pondre du code pour ceux qui cherchent.
En meme temps j'ai donné implicitement la solution dans ma réponse mais comme tu insistes je vais cracher le code tout fait.
* Traiter séquentiellement une à une les lignes d'un fichier
Première solution
* Définition de la fonction readline
* readline file i écrit la ligne i du fichier file
Code :
|
* Utilisation pour traiter un fichier ($file) ligne par ligne
Code :
|
La bonne méthode celle que j'ai prise
* Utilisation d'une boucle while associée à read
Code :
|
ou
Code :
|
Je ne suis du genre ingrat qui aime recevoir sans donner:
Marsh Posté le 03-10-2005 à 14:19:46
Comme je te disais, à priori s'il y a des espaces dans ta ligne, le while bouclera autant de fois qu'il y a d'espaces (recherche des séparateurs espace, tab et saut de ligne, et pas uniquement du saut de ligne).
Marsh Posté le 03-10-2005 à 14:23:20
Citation : je pense que la philosophie du forum était de ne pas pondre du code pour ceux qui cherchent. |
OK, on est parti sur une mauvaise base.
Oui, c'est curieux, on ne donne pas de réponse toute faite à celui qui demande sur ce forum, mais quand la solution est discutée et trouvée sur un topic, elle est fatalement utilisable telle quelle par le suivant.
C'est paradoxal, mais en apparence seulement : bcp de questions ne sont que ponctuelles plutôt que générales, et ne pourront servir de réponse toute faite au prochain, qui pourra par contre s'en inspirer.
Marsh Posté le 03-10-2005 à 14:25:09
Je ne sais pas si ce 'wc' est des plus efficaces... Et ce 'head' comme readline, oula.
Marsh Posté le 03-10-2005 à 14:31:01
sircam a écrit : Je ne sais pas si ce 'wc' est des plus efficaces... Et ce 'head' comme readline, oula. |
les deux dernieres sont hyper efficcaces quelque soit la taille de ton fichier:
Marsh Posté le 03-10-2005 à 14:35:36
Enfin avec (g)awk, c'est tellement plus simple... Tout ça se réduit à quoi, une ligne ?
Marsh Posté le 03-10-2005 à 14:57:40
sircam a écrit : Enfin avec (g)awk, c'est tellement plus simple... Tout ça se réduit à quoi, une ligne ? |
je suis en train de jeter un coup d'oeil sur gawk pour comprendre comment ça marche
donc si tu pouvais me filer un coup de main ce serait gentil de ta part.
Merci
Marsh Posté le 03-10-2005 à 17:22:43
sircam a écrit : Enfin avec (g)awk, c'est tellement plus simple... Tout ça se réduit à quoi, une ligne ? |
ça y est j'ai trouvé
voici la réponse en awk (s'il vous plait :bounce)
Code :
|
Code :
|
Marsh Posté le 04-10-2005 à 10:28:52
axk47 a écrit : ça y est j'ai trouvé
|
Awk est un outil extrèmement puissant. Il permet en effet d'effectuer des traitements complexes sur la ligne lue. Mais en général il impose de :
1) écrire un script awk
2) écrire un script shell pour utiliser le script awk.
Maintenant, si le traitement est simple, alors le shell peut suffire dans un seul script.
Il y a 2 moyens
1) se rappeler que la commande "read" lit l'entrée standard en s'arrêtant au "return" et qu'elle sort en statut "faux" quand il n'y a plus rien à lire => on peut récupérer ce statut dans un "while" ce qui donne:
Code :
|
2) utiliser la commande "exec" qui va stocker tout le fichier dans un buffer qu'on lira ensuite tranquillement
Code :
|
Ce système permet même de lire 2 (ou n) fichiers en parallèle
Code :
|
T'as un très bon cours de shell complet et en français ici: http://fr.lang.free.fr/cours/Shell_v1.4.pdf
Marsh Posté le 03-10-2005 à 11:27:22
Bonjour,
apres avoir chercher sur le forum et sur gooooooooooogle comment lire et récuperer ligne par ligne les infos contenues dans un fichier texte, je me suis décidé à poster ma question sur le forum. EN espérant quelqu'un a dejà fait un truc dans le genre pour me filer un coup de main.
je sais qu'il faut utiliser un boucle for ou while pas je bloque quand à la lecture ligne par ligne.
Merci d'avance
---------------
"Rendez tout aussi simple que possible mais ne simplifierez rien" Albert Einstein