Extraire une valeur numérique de fichiers

Fermé
Nikkki - 20 mai 2018 à 00:20
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 20 mai 2018 à 15:15
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 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
20 mai 2018 à 08:30
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
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
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 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422 > Nikkki
20 mai 2018 à 15:09
T'as un exemple précis à nous donner ?
0
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 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422 > Nikkki
20 mai 2018 à 15:15
À 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