Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1242 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Exécution sed sur gros fichier

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Exécution sed sur gros fichier

n°989571
LinoaKwak
Posté le 10-12-2007 à 14:58:47  profilanswer
 

Bonjour,
 
Je souhaite exécuter un gros fichier contenant des instructions sed (2.600.000 lignes de substitution) sur un gros fichier texte de 8Go.
Si je tente directement un sed -f mon_fichier.sed mon_gros_fichier.txt bien évidemment ma machine sature rapidement et je ne peux jamais obtenir mon résultat.
 
Comment puis-je exécuter mon script en un temps raisonnable ?
 
J'ai tenté 2 méthodes :
- exécuter mes commandes sed une à une sur mon gros fichier, mais cela prend trop de temps (plusieurs heures pour une instruction...)
- exécuter mon fichier sed sur des morceaux de mon fichier, mais j'ai des problèmes de mémoire !
 
Des idées ? ou dois-je investir dans du super matos de la mort ? :sweat:

mood
Publicité
Posté le 10-12-2007 à 14:58:47  profilanswer
 

n°989572
Taz
bisounours-codeur
Posté le 10-12-2007 à 15:03:16  profilanswer
 

ça veut dire quoi "ma machine sature"

n°989573
Xavier_OM
Pas de slips radioactifs !
Posté le 10-12-2007 à 15:05:19  profilanswer
 

sed bosse ligne par ligne, à priori tu n'as jamais les 8go chargés en mémoire... donc c'est plutôt un problème de vitesse non ?


---------------
https://www.baba-patrimoine.fr/  pour tout comprendre sur l'art et le patrimoine
n°989576
LinoaKwak
Posté le 10-12-2007 à 15:15:25  profilanswer
 

"ma machine sature" : j'ai un message "sed : couldn't re-allocate memory"
La mémoire virtuelle de mon pc est insuffisante, quand j'exécute tout mon fichier sed, que ce soit sur l'ensemble du fichier texte ou sur une partie.

n°989581
LinoaKwak
Posté le 10-12-2007 à 15:21:36  profilanswer
 

Si c'est un problème de vitesse, je ne vois pas comment optimiser mon code...
J'ai une liste de mots dans un fichier. Je souhaite supprimer toutes les occurrences de ces mots dans mon gros fichier texte. Pour cela je fais :
 
awk '{print "s/\t"$2"//g"}' liste_mots.txt >> comm_sed.sed
sed -f comm_sed.sed fichier_entree.txt > fichier_sortie.txt
 
Est-ce que je m'y prends mal ?

n°989584
Xavier_OM
Pas de slips radioactifs !
Posté le 10-12-2007 à 15:33:00  profilanswer
 

ca fait pareil avec -u ?


---------------
https://www.baba-patrimoine.fr/  pour tout comprendre sur l'art et le patrimoine
n°989587
LinoaKwak
Posté le 10-12-2007 à 15:40:55  profilanswer
 

Xavier_OM a écrit :

ca fait pareil avec -u ?


 
oui j'ai le meme message :??:

n°989595
Xavier_OM
Pas de slips radioactifs !
Posté le 10-12-2007 à 15:54:53  profilanswer
 

et ta liste de mots est "propre" ? Je veux dire, tu génères pas des tonnes de

s/    //g


ou autre conneries ? genre un de tes mots contient /...


---------------
https://www.baba-patrimoine.fr/  pour tout comprendre sur l'art et le patrimoine
n°989597
LinoaKwak
Posté le 10-12-2007 à 16:11:09  profilanswer
 

Xavier_OM a écrit :

et ta liste de mots est "propre" ? Je veux dire, tu génères pas des tonnes de

s/    //g


ou autre conneries ? genre un de tes mots contient /...


 
J'ai pas pensé à échapper les caractères spéciaux s'il y en a, en effet  :ange:  
Tu penses que le problème viendrait plus de là que de la taille des fichiers ?

n°989604
Xavier_OM
Pas de slips radioactifs !
Posté le 10-12-2007 à 16:26:40  profilanswer
 

LinoaKwak a écrit :


 
J'ai pas pensé à échapper les caractères spéciaux s'il y en a, en effet  :ange:  
Tu penses que le problème viendrait plus de là que de la taille des fichiers ?


 
 
Ben je sais pas trop, la taille du fichier c'est pas trop un problème normalement (sauf si tu as tes 8Go sur une seule ligne, auquel cas :D)
On peut faire "facilement" des boucles infinis en sed, genre

{ echo 1;echo 2;}|sed 'H;${x;P;D;}'


 
mais là tu fais du delete très basique, donc ca doit pas être ca... d'un autre côté, je n'ai pas un fichier de 8go de toto sous la main pour voir si s/toto//g explose tout  :D


---------------
https://www.baba-patrimoine.fr/  pour tout comprendre sur l'art et le patrimoine
mood
Publicité
Posté le 10-12-2007 à 16:26:40  profilanswer
 

n°989636
LinoaKwak
Posté le 10-12-2007 à 17:15:39  profilanswer
 

En réduisant la taille du fichier sed j'arrive à des temps corrects... Par contre je me retrouve avec un fichier vide :-D
 
Y a-t-il une façon simple d'échapper les caractères spéciaux ? (sans parcourir tous les mots pour mettre un backslash devant chaque caractère spécial)
genre en faisant un s/'toto'//g ...

n°989646
Xavier_OM
Pas de slips radioactifs !
Posté le 10-12-2007 à 17:31:15  profilanswer
 

LinoaKwak a écrit :

En réduisant la taille du fichier sed j'arrive à des temps corrects... Par contre je me retrouve avec un fichier vide :-D
 
Y a-t-il une façon simple d'échapper les caractères spéciaux ? (sans parcourir tous les mots pour mettre un backslash devant chaque caractère spécial)
genre en faisant un s/'toto'//g ...


 
 
faudrait un truc du genre  

sed 's/[;<>\*\|`&\$!#\(\)\[\]\{\}:]/\\&/g'


 
mais bon je suis pas convaincu que ca marche :/


---------------
https://www.baba-patrimoine.fr/  pour tout comprendre sur l'art et le patrimoine

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Exécution sed sur gros fichier

 

Sujets relatifs
Fichier sans aucun droit ?Nas Ubuntu indispo si copie gros fichier
[Shell - awk] Redirection ">>" écrase le fichierProblème déplacement de fichier
Gros pb de logs et de place libre sur un serveur Ubuntu[vi] impossible d'ouvrir un fichier volumineux. Des solutions ?
comment tagguer un fichier flac ou wav en ligne de commandelire un fichier CDR ou AI sous Linux ? comment récupérer les couches ?
IPCOP : Ecrire une route dans un fichier 
Plus de sujets relatifs à : Exécution sed sur gros fichier


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR