A voir également:
- Shell: parcourir fichier sans boucle while
- Classic shell windows 10 français - Télécharger - Personnalisation
- Efi shell - Forum Windows 10
- Efi shell version 2.31 - Forum Programmation
- Secure shell - Télécharger - Divers Web & Internet
- Retour à la ligne shell ✓ - Forum Shell
3 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
27 nov. 2010 à 10:16
27 nov. 2010 à 10:16
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
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 409
27 nov. 2010 à 11:07
27 nov. 2010 à 11:07
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
27 nov. 2010 à 11:11
27 nov. 2010 à 11:11
Salut,
Peut être que le traitement est ralenti chez puisque la boucle while fait plus que récupérer les données dans le fichier ou que le ralenti c'est dans une autre parti de script.
Voir le script ça sera mieux je pense.
Peut être que le traitement est ralenti chez puisque la boucle while fait plus que récupérer les données dans le fichier ou que le ralenti c'est dans une autre parti de script.
Voir le script ça sera mieux je pense.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 409
27 nov. 2010 à 11:14
27 nov. 2010 à 11:14
Salut,
Oui c'est sûr que le traitement en lui même doit influencer pas mal, mais déjà sur un traitement similaire, on constate que la boucle "for" est moins gourmande en temps général. Les temps "user" et "système" le sont également ;-)
Oui c'est sûr que le traitement en lui même doit influencer pas mal, mais déjà sur un traitement similaire, on constate que la boucle "for" est moins gourmande en temps général. Les temps "user" et "système" le sont également ;-)
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 409
27 nov. 2010 à 11:18
27 nov. 2010 à 11:18
J'ai réduis le nombre de ligne à 100000 :
$ time -p ./for_commande.sh real 10.07 user 6.61 sys 1.52 $ time -p ./while_commande.sh real 15.35 user 8.34 sys 2.55
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
27 nov. 2010 à 11:18
27 nov. 2010 à 11:18
Re,
Oui, j'a vu ça ;-), mais pour un million de ligne ce n'est pas vraiment énorme encore moins pour milliers.
Vu qu'il cherche un temps plus raisonnable je pense à un écart plus grand ;-)
Oui, j'a vu ça ;-), mais pour un million de ligne ce n'est pas vraiment énorme encore moins pour milliers.
Vu qu'il cherche un temps plus raisonnable je pense à un écart plus grand ;-)
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 409
27 nov. 2010 à 11:20
27 nov. 2010 à 11:20
Après reste à savoir si c'est possible ;-\
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.