Re: traitement de fichier long avec awk ou autre

Page principale

Répondre à ce message
Auteur: jl
Date:  
À: guilde
Sujet: Re: traitement de fichier long avec awk ou autre
Le jeudi 01 juillet 2021 à 18:10 +0200, Marc TERRIER a écrit :
> Bonjour Fred,
>
> Je te propose ceci, en Perl, mais à toi de dire si cela correspond à ton
> besoin :

Chouette du perl !
>
> $ cat test.txt
>
> mlf;sf;msdl;gdùfg;dùfg;ù;
> ,gee^vlêl^pfrle1234567xyazertyuiopqsdfghjkl123fdfdkjk7654321abpoiuytrezamcfgty
> hi321fgjkjklsqcjsl
>
> $ cat test.pl
>
> #!/usr/bin/perl
> while (<>) { /\d{7}[a-zA-Z]{2}.{18}(.{3})/ && printf "$1\n" }
>
> $ ./test.pl test.txt
> 123
>
> J'aurais bien aimé que cela sorte toutes les occurrences (j'en ai mis deux
> dans le fichier de test), mais ça ne sort que la première.

De ce que j'ai compris de la description c'est ce qu'il faut ?
Sinon on peut rajouter un g après la regexp (voir ci-dessous).

> Si quelqu'un de la Guilde qui s'y connaît mieux que moi en Perl veut bien
> prendre la suite, et améliorer ce premier jet...   ;-)
>
> Marc


À noter que quand on veut utiliser perl pour boucler sur les lignes d'un fichier
on peut utiliser perl avec les options -lne comme ceci pour tout faire en une
ligne de commande :

perl -lne '/\d{7}[a-zA-Z]{2}.{18}(.{3})/ && print $1' test.txt

ou pour récupérer tous les matches, pas juste le premier :

perl -lne 'print $1 while /\d{7}[a-zA-Z]{2}.{18}(.{3})/g' test.txt


Bonne soirée,

--
Jean-Loup