|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : juin 2007 Messages : 13 ![]() |
Bonjour,
Soit un gros fichier d'environ 90 000 lignes (mais ça peut varier légèrement) dans lequel j'ai besoin de récupérer le contenu d'un numéro de ligne déterminé aléatoirement En KSH, j'ai donc écrit le bout de code suivant Code :
Or ce bout de code fonctionne dans un autre script et au total, ca met 48h ! (Si je le désactive, ca ne mets "que" 4h) Je cherche donc une autre méthode plus rapide. J'ai envisagé de mettre le fichier dans un tableau ksh mais comme la taille du tableau est limité à 4096, ca ne marche pas. Est-ce qu'il existe une méthode ou fonction du côté de perl ou awk ou ... pour faire un accés direct dans un fichier à partir du numéro de ligne ? D'avance merci |
||
|
|
00
|
|
|
#2 |
|
Membre éprouvé
![]() Inscription : mars 2002 Messages : 401 ![]() |
Est-ce que tu peux connaitre la position en terme d'octet, tu peux faire en C (mais il dois y avoir un équivalent en Perl, PHP, ...) fopen et fseek.
Mais tu t'en sortiras mieux avec un script en Perl et une boucle ou un programme compilé que en shell. Là tu lances plusieurs processus, ça coûte du temps au système tout ça.
__________________
Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/ |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : juin 2007 Messages : 13 ![]() |
Bonjour,
Hélas non, je n'ai pas trop la possibilité de connaitre la position en terme d'octets : les lignes sont de 2 tailles différentes (8 ou 11 caractères) Je vais voir si du coté Perl, il y a une solution. |
|
|
00
|
|
|
#4 | ||
|
Membre éprouvé
![]() Inscription : mars 2002 Messages : 401 ![]() |
Code perl :
__________________
Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/ |
||
|
|
00
|
|
|
#5 | |||
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 546 ![]() |
le plus simple tu random un n° de ligne
mais tu ne cherche que cette ligne ! Citation:
sur un fichier dump de 24Go ça prend 3 secondes 5 seulement pour des lignes de 21935055 caracteres en en plus là c'est en écrivant un fichier de sortie... ![]() sur un fichier de 90000lignes de 512 caractères tu peux diviser par 4 au moins...je pense Citation:
voilà le test avec des lignes de moins de 128 caractères : Citation:
|
|||
|
|
00
|
|
|
#6 | ||
|
Invité régulier
![]() Inscription : juin 2007 Messages : 13 ![]() |
Bonjour,
Effectivement, avec Code :
Et cela a le mérite d'être simple à mettre en place. Décidément, il y aura toujours à apprendre avec sed ! (c'est bien dans les vieilles marmites que l'on fait les meilleures soupes !) Merci a tous |
||
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 546 ![]() |
sed avec une belle regexp est une commande unique de traitement par lot,
au lieu de trois si tu fais un cat un head et un tail + les deux pipes soit 5 éléments .... le choix est vite fait.... le gros inconveignant, c'est peu simple, en ça peut parfois manquer de souplesse... des scripts sed de 40 lignes.... c'est quasi illisible même quand on connait pas si mal.....en cas de besoin de mise à jour il est plus simple de le réecrire completment |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com