Shell: parcourir fichier sans boucle while
boug
-
boug -
boug -
Bonjour,
Désolé de vous déranger, mais je suis un petit peu perdu.
J'ai réalisé un script qui lit un fichier de nombre (un nombre par ligne) et qui trace la courbe associée aux valeurs du fichier.
Le parcours de ce fichier se fait avec une boucle while évidemment. Seulement pour les fichiers très longs (milliers de lignes), le temps de traitement n'est plus du tout raisonnable et on me demande de penser à une composition de commande Unix qui réglerait ça.
Je trouve pas du tout.
Merci d'avance.
Désolé de vous déranger, mais je suis un petit peu perdu.
J'ai réalisé un script qui lit un fichier de nombre (un nombre par ligne) et qui trace la courbe associée aux valeurs du fichier.
Le parcours de ce fichier se fait avec une boucle while évidemment. Seulement pour les fichiers très longs (milliers de lignes), le temps de traitement n'est plus du tout raisonnable et on me demande de penser à une composition de commande Unix qui réglerait ça.
Je trouve pas du tout.
Merci d'avance.
A voir également:
- Shell: parcourir fichier sans boucle while
- Classic shell - Télécharger - Personnalisation
- Ssh secure shell download - Télécharger - Divers Web & Internet
- Shell startup windows 10 - Guide
- Shell infrastructure host c'est quoi - Guide
- Shell do while ✓ - Forum Shell
3 réponses
Salut,
Voici quelque exemples de lecture sans while, mais peut être qu'il sera mieux de donner plus de précisions.
Comment tu veux utiliser les données récupéré par exemple?
Voici quelque exemples de lecture sans while, mais peut être qu'il sera mieux de donner plus de précisions.
Comment tu veux utiliser les données récupéré par exemple?
~$ cat fichier.txt 1 2 3 4 5 6 7 8 9 10 ~$ for ligne in $(cat fichier.txt);do echo je fais quelque chose avec $ligne;done je fais quelque chose avec 1 je fais quelque chose avec 2 je fais quelque chose avec 3 je fais quelque chose avec 4 je fais quelque chose avec 5 je fais quelque chose avec 6 je fais quelque chose avec 7 je fais quelque chose avec 8 je fais quelque chose avec 9 je fais quelque chose avec 10 ~$ awk '{ print "je fais quelque chose avec " $0}' fichier.txt je fais quelque chose avec 1 je fais quelque chose avec 2 je fais quelque chose avec 3 je fais quelque chose avec 4 je fais quelque chose avec 5 je fais quelque chose avec 6 je fais quelque chose avec 7 je fais quelque chose avec 8 je fais quelque chose avec 9 je fais quelque chose avec 10 ~$ sed 's/.*/je fais quelque chose avec &/' fichier.txt je fais quelque chose avec 1 je fais quelque chose avec 2 je fais quelque chose avec 3 je fais quelque chose avec 4 je fais quelque chose avec 5 je fais quelque chose avec 6 je fais quelque chose avec 7 je fais quelque chose avec 8 je fais quelque chose avec 9 je fais quelque chose avec 10
Salut,
Tiens un petit test à titre de comparaison sur une boucle "for" et une boucle "while" pour l'écriture d'un fichier d'1 million de lignes.
Machine de test : PIV à 1,5 Ghz avec 1 Go de ram
Tiens un petit test à titre de comparaison sur une boucle "for" et une boucle "while" pour l'écriture d'un fichier d'1 million de lignes.
Machine de test : PIV à 1,5 Ghz avec 1 Go de ram
$ time ./while_commande.sh 92.92user 33.94system 5:00.18elapsed 42%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+877minor)pagefaults 0swaps $ time ./for_commande.sh 66.89user 25.45system 3:34.78elapsed 42%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+27932minor)pagefaults 0swaps
Merci à tous pour vos réponses, j'ai finalement composé avec une boucle while et le temps de traitement n'est pas trop trop long, dans les 4 minutes pour les grosses images. Je vous donne des précisions:
mon objectif est de creer un script qui prend en argument une image jpg, qui lit les pixels et qui finalement me donne le nombre d'itérations de chaque niveau de couleurs (rouge vert bleu), par exemple:
rouge :
21 65 (65 itérations du pixel niveau de rouge 21)
34 12
145 56
...
vert:
45 3
123 4
...
etc
le fait est que pour image de quelques millions de pixels, c'est beaucoup moins rigolo au niveau du temps d'attente, car j'effectue le parcours des pixels avec une boucle while.
On m'a dit (le "on" c'est le professeur d'info qui nous a demandé ce travail) qu'avec "une composition de commande UNIX adéquate" on traitait les gros fichier beaucoup plus rapidement qu'avec un while.
Je me suis quand même contenté du while, mais j'aurai voulu avoir cette fameuse composition de commande adéquate.
NB: une image jpg peut être affichée en texte et cela donne un truc du genre:
123 23 45 12 45 67 54 87 98 124 254 9 56 67 78 200 100 5
.
.
.
.
ce sont des triplets rouge vert bleu.
mon objectif est de creer un script qui prend en argument une image jpg, qui lit les pixels et qui finalement me donne le nombre d'itérations de chaque niveau de couleurs (rouge vert bleu), par exemple:
rouge :
21 65 (65 itérations du pixel niveau de rouge 21)
34 12
145 56
...
vert:
45 3
123 4
...
etc
le fait est que pour image de quelques millions de pixels, c'est beaucoup moins rigolo au niveau du temps d'attente, car j'effectue le parcours des pixels avec une boucle while.
On m'a dit (le "on" c'est le professeur d'info qui nous a demandé ce travail) qu'avec "une composition de commande UNIX adéquate" on traitait les gros fichier beaucoup plus rapidement qu'avec un while.
Je me suis quand même contenté du while, mais j'aurai voulu avoir cette fameuse composition de commande adéquate.
NB: une image jpg peut être affichée en texte et cela donne un truc du genre:
123 23 45 12 45 67 54 87 98 124 254 9 56 67 78 200 100 5
.
.
.
.
ce sont des triplets rouge vert bleu.