Extraire une valeur numérique de fichiers

Nikkki -  
zipe31 Messages postés 38797 Statut Contributeur -
Bonjour, je sais qu'il y a des virtuoses ici qui peuvent m'aider à condition que je sois clair. Alors voici que que j'aimerais faire.

Dans un répertoire j'ai plus d'une centaine de fichiers.
Dans chaque fichier se trouve une valeur numérique qui fait toujours suite à la même chaine de caractère

Je souhaiterais que cette valeur soit reportée dans un fichier avec le nom du fichier dans lequel cette valeur a été trouvée.

Par ex.
toto.txt > jbf iq h sgfbn "duration">10.266666412353516 sg g bsgqsdgqsd sd v
tata.txt > sq vqsv qv sq "duration">8.5666315631 sf qgvc qggq qggqs
tonton.txt > qgs qg sgqg qg q "duration">20.2666664123 segvdqqg qgs

Dans le fichier out.txt on trouverait:
toto.txt 10.266666412353516
tata.txt 8.5666315631
tonton.txt 20.2666664123

Merci
A voir également:

1 réponse

zipe31 Messages postés 38797 Statut Contributeur 6 433
 
Salut,

En espérant que la valeur numérique décrite soit la seule présente dans le fichier :

$ head *
==> tata.txt <==
sq vqsv qv sq "duration">8.5666315631 sf qgvc qggq qggqs

==> tonton.txt <==
qgs qg sgqg qg q "duration">20.2666664123 segvdqqg qgs

==> toto.txt <==
jbf iq h sgfbn "duration">10.266666412353516 sg g bsgqsdgqsd sd v

$ grep -Ho '[.[:digit:]]*' * > out.txt

$ cat out.txt
tata.txt:8.5666315631
tonton.txt:20.2666664123
toto.txt:10.266666412353516


Si ce n'est pas la seule, et qu'elle se trouve toujours après
"duration">
, remplacer par :

$ grep -PHo 'duration">\K[.[:digit:]]*' *
tata.txt:8.5666315631
tonton.txt:20.2666664123
toto.txt:10.266666412353516


;-)
1
Nikkki
 
Merci d'avoir pris la peine de répondre.

Malheureusement n'est pas la seule présente, j'aurais du le spécifier. Désolé...

Par contre elle est toujours présente à la même ligne. Il me semble qu'il est possible d'ajouter ça.
0
Nikkki
 
Merci infiniment, ça marche nickel. Le seul petit bémol c'est que la chaîne est présente deux fois dans chaque fichier mais ça me fait déjà gagner un temp fou. Merci.
0
zipe31 Messages postés 38797 Statut Contributeur 6 433 > Nikkki
 
T'as un exemple précis à nous donner ?
0
Nikkki
 
avec un 'sort -u' j'ai pu retirer à la volée le doublon. J'ai gagné un temps considérable.
0
zipe31 Messages postés 38797 Statut Contributeur 6 433 > Nikkki
 
À tester :

$ head t*
==> tata.txt <==
sq vqsv qv sq "duration">8.5666315631 sf qgvc qggq qggqs
sq vqsv qv sq "duration">8.5666315631 sf qgvc qggq qggqs

==> tonton.txt <==
qgs qg sgqg qg q "duration">20.2666664123 segvdqqg qgs
qgs qg sgqg qg q "duration">20.2666664123 segvdqqg qgs

==> toto.txt <==
jbf iq h sgfbn "duration">10.266666412353516 sg g bsgqsdgqsd sd v
jbf iq h sgfbn "duration">10.266666412353516 sg g bsgqsdgqsd sd v

$ grep -m1 -o '[.[:digit:]]*' t*
tata.txt:8.5666315631
tonton.txt:20.2666664123
toto.txt:10.266666412353516
0