[SHELL] Extraire une chaine de caractere

karineb77 -  
 karineb77 -
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
A voir également:

4 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

Essaye avec "sed" :
var=$(sed -nre '1 {s/.{56}(.{5}).*/\1/; s/ //gp}' fichier)
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Quoi qu'avec "awk" ça donnerait plutôt :
awk 'NR==3 { print substr($0,57,5) }' fichier
;-))
0
karineb77
 
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
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
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
;-))
0
karineb77
 
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
0