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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [SHELL/SED] Extraire un bout de chaine

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SHELL/SED] Extraire un bout de chaine

n°2266183
chico008
what the wookie says ?
Posté le 21-09-2015 à 09:09:38  profilanswer
 

Bonjour,
 
je cherche a extraire un bout de donnée d'une chaine de caractère, mais je ne parviens pas à mes fin.
 
Prenons la chaine suivante

Code :
  1. /*-----------------standby_statistiques_inactive_DFPER-----------------*/;insert_job:standby_statistiques_inactive_DFPER;job_type:CMD;box_name:Inactive_DFPER;command:30248{BAT_DFPER}/statistiques.sh;machine:trt_inact_dfper;owner:dfpermgr;permission:gx,ge,wx,we;condition:d(standby_auto_test_inactive_DFPER);std_out_file:/tmp/_30248{DATEDUJOUR}.log;std_err_file:/tmp/_30248{DATEDUJOUR}.err;alarm_if_fail:t;send_notification:n;


 
J'aurais 4 champs a extraite, les 2er, insert_job et job_type ne bougerons pas.
par contre les 2 autres ne seront pas toujours à la meme place, il sagit de box_name et condition
 
je pensait faire un sed, en cherchant mes champs, et les extraires.
cependant, je n'y parviens pas.
 
j'ai essayer ceci ($LINE contient la ligne)

Code :
  1. echo $LINE | sed -e "/;insert_job:[.*];/p"


mais au final, ca me sort toute la ligne.
je pensait sinon le faire en AWK, mais je ne maitrise pas asser pour savoir comment faire.
 
Si quelqu'un a une idée, je suis preneur.
 
Merci de votre aide.


---------------
Serveur HFR - OpenTTD
mood
Publicité
Posté le 21-09-2015 à 09:09:38  profilanswer
 

n°2266185
Farian
Posté le 21-09-2015 à 10:58:35  profilanswer
 

Bonjour !
 
Je pense qu'en effet, n outil du genre awk ou perl seront assez adaptés, à ceci près que comme on ne peut spécifier qu'un seul séparateur, il faudra faire une boucle par champ, mais cela ne paraît pas mortel.
 
Si j'arrive à croiser une machine avec un awk installé, je tenterai de vous proposer un premier jet entre midi et deux.
 
Bonne continuation !

n°2266187
chico008
what the wookie says ?
Posté le 21-09-2015 à 11:49:16  profilanswer
 

ok
en attente de votre jet :)
 
Merci


---------------
Serveur HFR - OpenTTD
n°2266194
Farian
Posté le 21-09-2015 à 12:50:02  profilanswer
 

chico008 a écrit :

ok
en attente de votre jet :)
 
Merci


 
Ceci semble pas mal, il ne vous reste plus qu'à adapter la dernière ligne pour obtenir la sortie que vous voulez :  
 
Fichier AWK à sauvegarder (cmd.awk par la suite)

Code :
  1. /insert_job/ \
  2. {\
  3.    trouve1=0;trouve2=0; \
  4.    for (i =1; i < NF; i++) \
  5.    { \
  6.       nb = split( $i, tab,  ":" ); \
  7.       if (nb == 2) \
  8.       {\
  9.           if (tab[1] == "condition" ) \
  10.           {\
  11.              trouve1 = 1;
  12.              condition = tab[2];
  13.           }\
  14.           if (tab[1] == "box_name" ) \
  15.           {\
  16.              trouve2 = 1;
  17.              box_name = tab[2];
  18.           }\
  19.       }\
  20.    }\
  21.    if (trouve1 && trouve2) printf("Condition : [%s] - Box_name : [%s]\n", condition, box_name);
  22. }


 
Ligne de commande :  

Code :
  1. awk -F\; -f cmd.awk fichier_entree


 
A priori, le fichier de commandes gère quelques cas d'erreur, peut-être pas tous ...
 
Bonne continuation !

n°2266259
chico008
what the wookie says ?
Posté le 22-09-2015 à 06:51:39  profilanswer
 

Merci du coup de main.
 
J'aurais preferer une ligne a integrer dans mon shell directement.
 
et au passage j'ai finalement contourner la difficulté avec un egrep qui me donne pile ce que je voulais avec mon fichier en entrée, qui me donne une info par ligne.
 
Mais en tout cas merci quand meme, j'aiun autre projet ou pour le coup les données sont dans ce cas la, et votre script poura me servir.


---------------
Serveur HFR - OpenTTD
n°2266274
Farian
Posté le 22-09-2015 à 11:01:40  profilanswer
 

Pas de souci. Pour l'intégration en une ligne de commande, c'est possible en concaténant le contenu du fichier et en remplaçant le -f cmd.axk par 'contenu du fichier concaténé', j'avais choisi cette option pour la lisibilité et la facilité de mise au point.
 
Bonne continuation !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [SHELL/SED] Extraire un bout de chaine

 

Sujets relatifs
[C#] Découpage de chaine[VBS] Find & replace avec une chaine contetant des guillemets
[Shell Linux] Recherche dans un fichier evoluéExtraire du float d'un fichier en .txt
Chaîne de caractèreDécoupage chaîne
aide script shell pour projet scolaireCherche programmeur R chaine de Markov (simple et bien payé!)
Aide:extraire un groupe de données depuis un groupe de fichierscommandes Shell
Plus de sujets relatifs à : [SHELL/SED] Extraire un bout de chaine


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