Rechercher : dans
Par :

[SHELL] Extraire une chaine de caractere

Dernière réponse le 26 déc 2007 à 16:04:08 karineb77, le 26 déc 2007 à 12:59:52 
 Signaler ce message aux modérateurs

Bonjour,
Je cherche à extraire d'un fichier une chaine de caractere se trouvant sur la premiere ligne en position 57 et de longueur 5.
Je veux ensuite l'affecter à une variable pour pouvoir ensuite tester sa valeur.
Je voudrais également supprimer les espaces de cette chaine.

Comment faire ?
J'ai essayé avec awk mais je n'arrive pas à affecter le resultat à une variable externe en faisant cela
awk '{print substr($0,57,5)}' monfichier.txt | head -n1

Merci d'avance pour votre aide

Karine

Configuration: Windows XP
Firefox 2.0.0.4

1

jipicy, le 26 déc 2007 à 13:30:22

Salut,

Essaye avec "sed" :

var=$(sed -nre '1 {s/.{56}(.{5}).*/\1/; s/ //gp}' fichier)

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

2

jipicy, le 26 déc 2007 à 13:34:57

Quoi qu'avec "awk" ça donnerait plutôt :

awk 'NR==3 { print substr($0,57,5) }' fichier
;-))

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

3

karineb77, le 26 déc 2007 à 14:29:02

Merci pour tes réponses.
Pour awk, je pense plutôt qu'il faut tester NR==1 si je veux la première ligne ?

Sinon, je n'arrive pas à exécuter la commande sed :
quand je tape cette commande sed -ne '1 {s/.{56}(.{5}).*/\1/; s/ //gp}' monfichier,
j'ai le résultat suivant :
sed: Function 1 {s/.{56}(.{5}).*/\1/; s/ //gp} cannot be parsed.

Karine

Répondre à karineb77

4

jipicy, le 26 déc 2007 à 14:35:45

Oups sorry pour le numéro de ligne avec "awk" ;-((

Pour sed il faut absolument mettre le switch "-r" (sed -nre) pour employer l'expression sous cette forme (emploi des regex étendues), sinon il faut protéger certains caractères :

sed -ne '1 {s/.\{56\}\(.\{5\}\).*/\1/; s/ //gp}' monfichier
;-))

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

5

 karineb77, le 26 déc 2007 à 16:04:08

Hello,
Finalement, j'ai réussi en faisant comme cela car je n'arrivais pas à utiliser la commande sed que tu m'avais passée.

var=`awk 'NR==1 {print substr($0,57,5)}' $fic |sed 's/ *//'`

Il y a surement plus simple mais çà marche :-)

Karine

Répondre à karineb77