|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Inscription : septembre 2006 Messages : 339 ![]() |
Bonjour,
je suis en train d'executer une simple commande de concatenation de fichier: Code :
J'ai essaye de remplacer la commande cat par : type, ou awk mais j'ai toujours pratiquement les meme temps d'execution. Je n'ai rien trouve sur le net qui explique la difference qui peut y avoir entre l'utilisation de cat dans des SE differents. Qqn a une idee SVP? ou au moins une solution pour avoir une performance quasi egale entre Linux et windows? Merci |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 069 ![]() |
pourquoi faire une boucle, qui lancera autant de cat qu'il y a de fichiers ?
le but de cat est justement de concaténer le contenu de fichers, donc :et puis, on ne fait pas for item in $(command); surtout pas ls. parce que |
|
|
10
|
|
|
#3 | |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 534 ![]() |
Citation:
pour info la ram ne represente que la quantité de données qui peut y etre stockée sans avoir a faire des copies depuis/vers le disque qui est un périphérique mécanique et par concequent lent. deplus 8G de ram lente freinera plus le ressenti que 4 ou meme 2 rapide La quantité de ram n'accelere que tres tres tres peu le ressenti utilisateur. la comparaisent en seconde est pertinante mais pas la suite de la phrase Pour le reste j'allais faire la meme remarque que N_BaH, qui a tout a fait raison |
|
|
|
00
|
|
|
#4 | ||
|
Membre du Club
![]() Inscription : septembre 2006 Messages : 339 ![]() |
En fait j'essayais de reduire la question a l'essentiel..
En fait voici mon code: Code :
Par contre, aucun d'entre vous n'a souleve le probleme de la difference des temps d'execution entre SE, qui est la source meme du probleme.. |
||
|
|
00
|
|
|
#5 | |||
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 069 ![]() |
Citation:
Code bash :
|
|||
|
|
20
|
|
|
#6 |
|
Membre Expert
![]() |
j'adore les réponses de N_BaH
sinon, pour les problèmes de temps de réponse (qui ne sont pas forcément à l'origine du problème), tu utilises quoi sous Windows ? Cygwin ou les versions Windows des coreutils ? |
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : septembre 2006 Messages : 339 ![]() |
Cygwin.
J'ai aussi essayé d'utiliser Windows Coreutils seulement mais j'ai toujours eu les mêmes problèmes.. |
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() Inscription : septembre 2006 Messages : 339 ![]() |
Quelqu'un a-t-il fait le test au moins?
Ca me semble pourtant un post valide parce que les écarts entre Linux et Windows sont énormes. Et encore, meme entre Win7 et WinXP. J'ai beau cherché sur le net mais je n'ai trouvé aucune information sur le sujet.. |
|
|
00
|
|
|
#9 | ||
|
Membre Expert
![]() |
Quelle volumétrie tu as ?
Je viens de faire un test sur un bête PC sous Windows XP (X2 2GHz avec 2Go de RAM) sur 152 Mo et 284 fichiers .txt et ça prend genre 5 secondes; sur 840 Mo et 19 fichiers .dsx (c'est comme des fichiers textes), ça a pris 40 secondes... Les tests : Code :
Donc à mon avis, soit c'est le reste de ton algo qui faisait perdre du temps, soit c'est cygwin quand tu utilises cygwin... dans tous les cas, difficile de répondre vu qu'il manque pleins d'informations (en vrac) : le test sous Linux, tu l'as fait sur la même machine ? Parce que tu parles de la RAM, mais pour cat seul, on s'en fiche : pour info, lors de mon test, cat a pris mois de 2 Mo de RAM ! Par contre, si tu as un disque en 10k rpm en raid 0 sous Linux et un vieux disque pata sous Windows, ça va plus jouer ! ton disque Windows n'est pas fragmenté ? quelle est exactement la commande que tu compares : le script complet ou juste le cat ? Avec ou sans la boucle for ? etc... |
||
|
|
10
|
|
|
#10 |
|
Membre du Club
![]() Inscription : septembre 2006 Messages : 339 ![]() |
Bon après de multiples tests, il s'est avéré que le temps varie à cause de l'usage de la boucle for pour cat.
Donc, capturer la liste dans une variable et faire : réduit le temps d'exécution d'une manière très évidente. Par contre, cela me fait revenir au problème initial auquel j'ai du écrire une boucle pour : c'est la nécessite d'ajouter unes ligne vide à la fin de chaque fichier pour avoir une concaténation acceptable. Si fichierA ne contient pas de retour chariot à la fin, alors la dernière ligne de fichierA et la première ligne de fichierB seraient sur la même ligne si on fait: Y a aucune option de cat qui fait ceci. Et j'ai beau cherché… une boucle s'impose ici. Ya t il une alternative? Merci beaucoup |
|
|
00
|
|
|
#11 | ||
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 069 ![]() |
Code :
? |
||
|
|
10
|
|
|
#12 | ||
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Salut,
Peut être une alternative avec "sed" : Code :
Édit : Suffit amplement
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
||
|
|
20
|
Copyright © 2000-2012 - www.developpez.com