Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1933 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°386293
frisko
----> Soutenez le mouvement <-
Posté le 08-01-2004 à 13:36:12  profilanswer
 

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.

mood
Publicité
Posté le 08-01-2004 à 13:36:12  profilanswer
 

n°386306
macomboh
Posté le 08-01-2004 à 13:44:07  profilanswer
 

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

n°386319
frisko
----> Soutenez le mouvement <-
Posté le 08-01-2004 à 14:04:57  profilanswer
 

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 ...

n°386321
void_ppc
Posté le 08-01-2004 à 14:10:38  profilanswer
 

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
n°386328
bobuse
Posté le 08-01-2004 à 14:24:15  profilanswer
 

avec awk :


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

n°386334
void_ppc
Posté le 08-01-2004 à 14:29:50  profilanswer
 

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

n°386343
void_ppc
Posté le 08-01-2004 à 14:45:19  profilanswer
 


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


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

n°386344
void_ppc
Posté le 08-01-2004 à 14:52:00  profilanswer
 

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
n°386345
frisko
----> Soutenez le mouvement <-
Posté le 08-01-2004 à 14:52:46  profilanswer
 

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 ?

n°386354
philou_a7
\_o< coin ! >o_/
Posté le 08-01-2004 à 15:05:04  profilanswer
 

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 ?

mood
Publicité
Posté le 08-01-2004 à 15:05:04  profilanswer
 

n°386369
frisko
----> Soutenez le mouvement <-
Posté le 08-01-2004 à 15:30:47  profilanswer
 

et non ! :na:

n°386395
frisko
----> Soutenez le mouvement <-
Posté le 08-01-2004 à 15:57:52  profilanswer
 

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

n°386445
void_ppc
Posté le 08-01-2004 à 17:26:54  profilanswer
 

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

n°392909
aigles
Posté le 20-01-2004 à 17:09:40  profilanswer
 

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

n°392946
frisko
----> Soutenez le mouvement <-
Posté le 20-01-2004 à 17:56:46  profilanswer
 

Merci aigles,
 
tu reponds exactement a ma question !  
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 

Sujets relatifs
[aide]installation mandrake 9.2 DDNewbie : demande d'aide sous mandrake 9.2
Caractère manquant sur le clavier sous Linux DebianSystème piraté ?? Besoin d'aide => Débutant :(
Installation du Speedtouch sur Redhat 9, besoin d'aidePetite demande d'aide pour ceux connectés au net via Linux.
Aide telinit car je colle ....[première installation ] Ne trouve pas l'unique disque (SATA)[aide]
[Debian] Besoin d'aide pour réparer mes bétises![Besoin d'aide sur Linux] Probleme de login localhost...
Plus de sujets relatifs à : extraire une chaine de caractere à l'aide de awk ou autre chose ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR