Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/01/2020, à 11:11

CopperOstreicole

[Résolu] - Sélectionner une chaîne de caractères inconnue

Bonjour,

Je cherche à récupérer rapidement des données avec un script,
en rouge dans le file ci-dessous. Je voudrais récupérer tous les symboles et chiffres situés entre "HF=" et "\RMSD".

J'ai essayé d'utiliser cut, mais les colonnes sont décalées en fonction des fichiers.

À noter que la valeur en rouge peut se retrouver sur deux lignes successives,
qu'il y a toujours 7 chiffres après le point et 3 ou 4 avant.

,-0.3405475895,-0.1192319323\O,-0.1694782422,-0.9843808128,0.903434340
8\O,1.0453115842,0.0649564726,-0.6874592553\C,-1.2874111704,0.11887450
53,-0.9215218498\H,-2.1847592765,-0.3598002676,-0.5409797262\H,-1.3872
620076,1.2012091084,-0.8315258175\H,-1.1527445967,-0.1103954767,-1.977
658413\C,2.3087738167,-0.2355378966,-0.0013476561\H,2.2791159695,-1.27
79573584,0.313039409\H,2.3855053734,0.4084345829,0.8707439029\C,3.4412
414073,0.0442433491,-0.9653675351\H,3.3072839298,-0.5758769672,-1.8590
038713\H,3.3882470929,1.0906459568,-1.2665956268\C,4.8089896919,-0.218
5779441,-0.3277438289\H,4.859372825,-1.229411726,0.0878612176\H,5.5821
925552,-0.1772082031,-1.0991064982\C,5.2408991231,0.78485786,0.7971059
774\O,6.3167901926,0.4945055664,1.3658006262\O,4.4797580056,1.76373726
12,0.9959881398\\Version=ES64L-G16RevC.01\State=1-A\HF=-535.2246176\RM
SD=4.675e-09\RMSF=3.826e-06\ZeroPoint=0.1478533\Thermal=0.15903\ETot=-
535.0655876\HTot=-535.0646434\GTot=-535.1166417\Dipole=-4.1455574,-1.2
139095,-2.5545523\DipoleDeriv=1.9288288,0.1153442,-0.0340441,0.3941104
,0.6046842,-0.5918684,-0.5214869,-0.6351826,1.1162456,-0.7752866,-0.00
31853,-0.0402717,-0.2273585,-0.6101586,0.3691521,0.3385918,0.4067146,-
0.9428482,-1.9913019,-0.1955998,0.1349245,-0.1676594,-0.3555764,0.1853
872,0.1578988,0.2010942,-0.522284,-0.1870287,0.0970964,-0.1583688,0.13

Merci d'avance !

Dernière modification par CopperOstreicole (Le 21/01/2020, à 14:06)

Hors ligne

#2 Le 21/01/2020, à 11:57

pingouinux

Re : [Résolu] - Sélectionner une chaîne de caractères inconnue

Bonjour,
Essaye

grep -Po '(?<=HF=)-?\d+\.?\d+(?=\\RMSD)' <(tr -d '\n' <fichier)

Édité :
On peut simplifier si on n'a pas besoin de préciser le format de ce qui se trouve entre HF= et \RMSD :

grep -Po '(?<=HF=).*(?=\\RMSD)' <(tr -d '\n' <icop)

Dernière modification par pingouinux (Le 21/01/2020, à 12:21)

Hors ligne

#3 Le 21/01/2020, à 12:58

Compte supprimé

Re : [Résolu] - Sélectionner une chaîne de caractères inconnue

Bonjour,
Et sans utiliser une expression rationnelle Perl, c'est possible?
J''ai cherché dans ce sens en vain, d'où ma demande.

#4 Le 21/01/2020, à 13:46

pingouinux

Re : [Résolu] - Sélectionner une chaîne de caractères inconnue

pseudofab #3 a écrit :

Et sans utiliser une expression rationnelle Perl, c'est possible?

sed -r 's/.*HF=(.*)\\RMSD.*/\1/' <(tr -d '\n' <fichier)

Hors ligne

#5 Le 21/01/2020, à 14:06

CopperOstreicole

Re : [Résolu] - Sélectionner une chaîne de caractères inconnue

Merci, c'est parfait !! cool

pingouinux a écrit :

Bonjour,
Essaye

grep -Po '(?<=HF=)-?\d+\.?\d+(?=\\RMSD)' <(tr -d '\n' <fichier)

Édité :
On peut simplifier si on n'a pas besoin de préciser le format de ce qui se trouve entre HF= et \RMSD :

grep -Po '(?<=HF=).*(?=\\RMSD)' <(tr -d '\n' <icop)

Hors ligne

#6 Le 21/01/2020, à 15:19

Compte supprimé

Re : [Résolu] - Sélectionner une chaîne de caractères inconnue

pingouinux a écrit :
pseudofab #3 a écrit :

Et sans utiliser une expression rationnelle Perl, c'est possible?

sed -r 's/.*HF=(.*)\\RMSD.*/\1/' <(tr -d '\n' <fichier)

Cela ne fonctionne que si il n'y a q'un seul HF=machintruc/RMSD dans le fichier ...

#7 Le 21/01/2020, à 17:10

pingouinux

Re : [Résolu] - Sélectionner une chaîne de caractères inconnue

pseudofab #6 a écrit :

Cela ne fonctionne que si il n'y a q'un seul HF=machintruc/RMSD dans le fichier ...

C'est exact, mais j'ai compris (peut-être à tort) qu'il n'y avait qu'une seule chaîne à chercher, même si elle peut se prolonger sur la ligne suivante.
S'il y a plusieurs chaînes, la première expression en #2 fonctionne.

Hors ligne

#8 Le 21/01/2020, à 17:47

Compte supprimé

Re : [Résolu] - Sélectionner une chaîne de caractères inconnue

Oui le post est résolu ... wink
Je me demandais seulement si on aurait pu faire l'équivalent de l'expression en #2 sans passer par une expression rationnelle Perl...
Je cherchai cette expression avec des expressions régulières basiques ou étendues.
Aurais je pu y arriver?

#9 Le 21/01/2020, à 18:22

pingouinux

Re : [Résolu] - Sélectionner une chaîne de caractères inconnue

python se prête bien à la manipulation des chaînes de caractères.

$ cat script.py
import re, sys
with open(sys.argv[1]) as f:
    for k in re.findall(r'(HF=)(.*?)(\\RMSD)',f.read().replace('\n','')): print(k[1])

à lancer ainsi

python3 script.py fichier

Hors ligne

#10 Le 21/01/2020, à 23:16

Compte supprimé

Re : [Résolu] - Sélectionner une chaîne de caractères inconnue

smile Merci

#11 Le 22/01/2020, à 00:15

kamaris

Re : [Résolu] - Sélectionner une chaîne de caractères inconnue

Pour info, cette question a été posée aussi ici : https://www.developpez.net/forums/d2040 … -inconnue/
Et c'est en fait à peu près la même question qu'une autre déjà posée avant : https://www.developpez.net/forums/d2014 … urs-apres/
Diverses propositions / solutions sont données dans ces fils.

Hors ligne