extraire une chaine de caractere à l'aide de awk ou autre chose ...

extraire une chaine de caractere à l'aide de awk ou autre chose ... - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 08-01-2004 à 13:36:12    

Bonjour,
 
Je cherche à extraire une chaine de caractère d'un fichier et de la récuper comme variable.
Voici un exemple :  
 
    [moi@monpc moi]$ head -n1  fichier
 
    vitesseChamp_Facedom30.005000
 
    [moi@monpc moi]$
 
j'aimerai recuper dans une variable juste le nombre.
Je pensais utiliser awk (ex :head -n1 fichier|awk '{printf $2} ') mais je ne vois pas comment séparer le texte du nombre
 
Je n'ai pas trouvé sur le site de topic à se sujet.
Est ce que quelqu'un aurait une idée ??
 
je vous remercie par avance.

Reply

Marsh Posté le 08-01-2004 à 13:36:12   

Reply

Marsh Posté le 08-01-2004 à 13:44:07    

awk est un outil tres puissant, tu peux tout faire ,
avec awk -f  toto.cmd , tu peux metres un fichier de commande
avec une programmation c-like, pour plus de précision
tout simplement man awk : c'est un veritable manuel trés complet

Reply

Marsh Posté le 08-01-2004 à 14:04:57    

merci pour la réponse.
 
qu'est ce que c-like ??
 
Sinon, n'il y a t-il pas de solution simple car le man awk est un peu énorme ...

Reply

Marsh Posté le 08-01-2004 à 14:10:38    

essaye voir ca :
 


head -n1 fichier|awk '{printf $2} '|sed s/[0-9]*\.[0-9]*$//g


 
Donne voir quand même la structure du fichier pour voir si y a moyen de faire plus propre :D


Message édité par void_ppc le 08-01-2004 à 14:12:36
Reply

Marsh Posté le 08-01-2004 à 14:24:15    

avec awk :


echo "vitesseChamp_Facedom30.005000" | awk '{gsub("[0-9]*[.][0-9]*","",$0); print $0  }'

Reply

Marsh Posté le 08-01-2004 à 14:29:50    

bobuse a écrit :

avec awk :


echo "vitesseChamp_Facedom30.005000" | awk '{gsub("[0-9]*[.][0-9]*","",$0); print $0  }'




 
ouai mais faut combiner ca avec le awk de départ pour piocher dans le fichier direct :D

Reply

Marsh Posté le 08-01-2004 à 14:45:19    


head -n1 taist|cut -f2 -d" "| tr -d [:digit:].


 
mais marche pas si un point est contenu dans la chaine de caractères.

Reply

Marsh Posté le 08-01-2004 à 14:52:00    

en gros y a x manières de le faire (avec x très grand)


Message édité par void_ppc le 08-01-2004 à 14:52:13
Reply

Marsh Posté le 08-01-2004 à 14:52:46    

merci pour vos reponses !
 
le sed me conviens ainsi que le gsub
head -n1 Obstacle.sauv | awk '{gsub("[0-9]*[.][0-9]*","",$0); print $0  }'
 
Mes fichiers que je compte traiter avec cette ligne de commande peuvent être très volumineux car ils contiennent différentes sauvegardes de calculs à différents temps (le chiffre que je veux recuperer). Je vous montre juste le début :
 
      [moi@monpc repertoire]$ head -n10 fichier
      vitesseChamp_Facedom30.005000  
      Champ_Face  
      3.000500e+01
      1
      2091  
 
      1
      2091  
 
      2091
      [moi@monpc repertoire]$
 
le but final  de mon script est de voir dans la première ligne du fichier de sauvegarde, la première chaine de caractère qui est collée à mon temps de sauvegarde. une fois la ligne identifiée, je recherche la dernière ligne du fichier contenant cette chaine de caractère et j'en déduit le dernier temps de sauvegarde. malin, non ?

Reply

Marsh Posté le 08-01-2004 à 15:05:04    

il a quand meme l'air super mal foutu ton fichier :p tu n'as pas moyen de modifier le programme qui le crée pour structurer un poil plus la sortie par exemple ?

Reply

Marsh Posté le 08-01-2004 à 15:05:04   

Reply

Marsh Posté le 08-01-2004 à 15:30:47    

et non ! :na:

Reply

Marsh Posté le 08-01-2004 à 15:57:52    

le fichier est issu d'un code de calcul de plus de 500 000 lignes ecrit en C++/fortran et dont la compilation dure plusieurs heures.
Et je ne montre qu'une partie du fichier car sa taille peut atteindre plusieurs Giga de données

Reply

Marsh Posté le 08-01-2004 à 17:26:54    

en même temps modifier le format de sortie ca doit pas prendre 107 ans non plus

Reply

Marsh Posté le 20-01-2004 à 17:09:40    

Si j'ai bien tout compris ...
 

Code :
  1. awk '
  2. NR == 1 {       # Premiere ligne, recupere identifiant
  3.   sub("[0-9].*","",$1);
  4.   Id = $1;
  5. }
  6. $0 ~ "^" Id {   # Mémorise ligne commençant par identifiant
  7.    Last = $0;
  8. }
  9. END {        # Affiche derniere ligne troouvée avec identifiant
  10.    print Last;
  11. } ' input_file

Reply

Marsh Posté le 20-01-2004 à 17:56:46    

Merci aigles,
 
tu reponds exactement a ma question !  
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed