Rechercher : dans
Par :

Extraire une chaîne

Dernière réponse le 24 avr 2008 à 10:43:50 mecool23, le 23 avr 2008 à 09:56:47 
 Signaler ce message aux modérateurs

Bonjour,
mon probléme consiste à extraire une chaîne de caractére bien précise, j ai ce script pour extraire la chaîne mais je sais pas comment l adapter à mon cas; voici le script

X=$(grep "Last_line" master.out | grep -o '[0-14][0-14]*')
Y=$(grep "First_pixel" master.out | grep -o '[0-14][0-14]*')
plotoffsets interferogram.out 1 "$X" 1 "$Y" 0.11 master.afiltered


et voici la chaine(soulignée) que je veux extraire

First_line (w.r.t. original_image): 1
Last_line (w.r.t. original_image): 26308
First_pixel (w.r.t. original_image): 1
Last_pixel (w.r.t. original_image): 4900

quelqu un peut m aider??


merci d avance

CYG

Configuration: Windows 2003
Firefox 2.0.0.9

1

jmg78, le 23 avr 2008 à 10:12:38

Donne le fichier master.out

Répondre à jmg78

2

mecool23, le 23 avr 2008 à 10:28:27
Répondre à mecool23

3

jipicy, le 23 avr 2008 à 12:02:52

Salut,

egrep '^(Last|First)_(line|pixel) ' master.out | egrep -o '[0-9]{2,}'
;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

4

mecool23, le 23 avr 2008 à 14:27:58

Vous pouvez m'expliquer la signification de cette commande car ce que je cherche moi c est de remplacer "$X" par 26308, et "$Y" par 4900

merci d avance;

CYG

Répondre à mecool23

5

jipicy, le 23 avr 2008 à 18:51:58

Bon déjà dans le fichier fourni sur cjoint, il n'y a aucune valeur "26308".
Ensuite, même si elle y était, comme il existe plusieurs lignes commençant par "Last_line" il faut savoir dans quelle partie, du moins entre quelle et quelle partie extraire cette fameuse ligne...

Sinon, la syntaxe donnée correspond à :

egrep
Ou "grep -E" pour utiliser la syntaxe des expressions étendues

'^(Last|First)_(line|pixel) '
On recherche toutes chaines commençant par Last OU First suivi d'un underscore et suivi par line OU pixel

| 
Puis on filtre ce résultat

egrep -o '[0-9]{2,}'
En recherchant qu'une chaine exclusivement numérique et composée d'au moins 2 chiffres ou plus
;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

6

mecool23, le 24 avr 2008 à 10:00:54

Bonjour,

merci bcp pour l'explication, pour les valeurs vous avez raison je me suis trompé, c est 26445 au lieu de 26308.
votre commande va me donner juste une chaine, non?? car moi je veux extraire les deux chaines 26445 et 4900, et les remplacer respectivement dans ma ligne de commande <plotoffsets interferogram.out 1 "$X" 1 "$Y" 0.11 master.afiltered>avec ($X =26445, et $Y=4900)

merci d avance

CYG

Répondre à mecool23

7

jipicy, le 24 avr 2008 à 10:10:16

Ok, par contre tu m'as toujours pas dit sur quel(s) critère(s) déterminer les lignes voulues. En suivant ta demande je suppose que c'est les 2 premières rencontrées, exact ?
De ce fait, essayes avec ça :

[tmpfs]$ X=$(egrep -m 1 '^Last_line ' master.out | egrep -o '[0-9]{2,}')
[tmpfs]$ Y=$(egrep -m 1 '^Last_pixel ' master.out | egrep -o '[0-9]{2,}')
[tmpfs]$ echo -e "X=$X\nY=$Y"
X=26445
Y=4900
[tmpfs]$
;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

8

 mecool23, le 24 avr 2008 à 10:43:50

Exact, merci beaucoup jipicy

tt mes respects

CYG

Répondre à mecool23