sed, tr, awk, grep, perl, ...

On y discute de tout, ou presque...
Répondre
Avatar de l’utilisateur
Dunatotatos
Membre
Membre
Messages : 426
Inscription : 11 mai 2016, 20:56
Status : Hors-ligne

Salut à tous,

Je fais pas mal de traitement de larges fichiers (de l'ordre du million de lignes), et je galère pour le moment avec des outils certainement non adéquats. J'utilise des outils comme grep, sed, et cut pour récupérer les valeurs qui m'intéressent, et réécris mes fichiers transformés avec des printf et des redirections de flux vers des fichiers temporaires. Pire encore, il m'arrive d'écrire un traitement automatisé sur une ligne seule, puis d'exécuter ce traitement dans une boucle sh pour parcourir le fichier entier...

Je me doute bien que ce n'est pas la solution optimale. Je pense maîtriser grep, tr et cut, mais ne sais que très peu utiliser sed, et ne connais absolument pas awk et perl. Je mentionne ces outils parce-que je pense à ceux-là, mais j'en oublie certainement.

Je cherche essentiellement un moyen de parcourir ces fichiers gigantesques, de filtrer selon des expressions régulières (éventuellement multi-lignes), de capturer des variables, et d'écrire des lignes transformées à partir des variables capturées dans un nouveau fichier (ou sur stdin). De la modification sur place ne m'intéresse pas vraiment. Quel serait l'outil le plus adéquat ? Ça ne me dérange pas d'avoir à consacrer quelques heures à apprendre un outil complexe pour faire de la magie noire. Je souhaite juste que l'investissement soit rentable.

Merci pour vos conseils !
Duna
Avatar de l’utilisateur
Mimoza
Contributeur
Contributeur
Messages : 655
Inscription : 22 avr. 2016, 12:00
Localisation : Terre
Status : Hors-ligne

J'ai eu a faire ce genre de manipulation mais pas sur des fichiers aussi immense. J'avais opté pour AWK du fait de son langage de scripting qui me paraissait plus compréhensible que celui de SED.
Pour Perl c'est un langage de programmation donc même s'il est très adapté au traitement de texte il fait bien plus que cela. Il a été pensé pour remplacer des traitement SED/AWK/SH/GREP/CUT qui devenait trop gros.
Avatar de l’utilisateur
Dunatotatos
Membre
Membre
Messages : 426
Inscription : 11 mai 2016, 20:56
Status : Hors-ligne

Je vois que awk ne gère pas les captures dans les regex : https://stackoverflow.com/questions/295 ... ne-pattern
C'est vrai ?
Avatar de l’utilisateur
funkygoby
Membre
Membre
Messages : 106
Inscription : 15 mai 2016, 15:54
Status : Hors-ligne

Je me suis servi de "sed" (pour "Stream Editing") dernièrement pour remplacer "../book.ly" par "book.ly" et mon pseudo par mon nom complet dans 250 fichiers répartis dans des dossier. Au dela de ça, je sais pas trop si c'est adapté.
Avatar de l’utilisateur
Mimoza
Contributeur
Contributeur
Messages : 655
Inscription : 22 avr. 2016, 12:00
Localisation : Terre
Status : Hors-ligne

@Dunatotatos : Awk de base oui, mais la version G(nu)Awk si.
Répondre