Auteur: frederic bressy Date: À: guilde Sujet: Re: traitement de fichier long avec awk ou autre
Bonsoir
j'ai oublié de préciser la zone que j'avais nommé "nnnnnnnxx" qui permet
de caractériser les entités présentes dans le fichiers, je sais ce
qu'elle contient pour l'entité qui m'intéresse
je n'avais pas mis sa valeur pour des raisons de confidentialité.
on va dire qu'elle contient "4569111vt"
et de cette zone 18 caractères plus loin il y a la zone qui m'intéresse
qui contient 3 caractères numériques
il faudrait donc lister le nombre de fois qu’apparaît cette entité et
pour chaque, ce que contient la donnée 18 caractères plus loin
exemple
"4569111vt" occurrence 1 -- zone 18 : 452
"4569111vt" occurrence 2 -- zone 18 : 123
.......
"4569111vt" occurrence X -- zone 18 : 007
"4569111vt" pourrait etre un parametre, la zone 18 aussi ainsi que sa
longueur, et le fichier à tester.
--
Cordialement
Bressy Frederic
Pensez ENVIRONNEMENT : n'imprimer que si nécessaire
Think ENVIRONMENT: print only if necessary
Le 01/07/2021 à 18:50, jl a écrit : > 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,
>