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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Shell UNIX] Recherche dans une ligne

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Shell UNIX] Recherche dans une ligne

n°2110235
chico008
what the wookie says ?
Posté le 07-11-2011 à 19:39:17  profilanswer
 

Bonjour,  
 
j'aimerais afficher une partie d'une ligne seulement, qui se trouve dans un fichier texte.
j'ai un fichier texte, avec par exemple une ligne type :  
HBA_CTLGEC : BACTL00DEB  BACTL10IND  BACTL20ANA  BACTL99FIN

si je fait un grep DEB monfichier, le resultat m'affiche toute la ligne,  
J'aimerais savoir si il y'a un moyen pour que seul BACTL00DEB soit afficher ?
 
j'ai essayer un peu tout et n'importe quoi, sans succès, et mes connaissances en Awk sont extrêmement limités.
 
Donc je m'en remet a vous, si quelqu'un a une idée, ca m'arrangerais bien.


---------------
Serveur HFR - OpenTTD
mood
Publicité
Posté le 07-11-2011 à 19:39:17  profilanswer
 

n°2110237
mrbebert
Posté le 07-11-2011 à 19:52:37  profilanswer
 

Regarde la commande "cut" :)  
Tu extrais la partie qui t'intéresse en fonction du nombre de caractère si sa position est toujours la même, soit par le numéro du champ si c'est le séparateur qui est constant.


---------------
Doucement le matin, pas trop vite le soir.
n°2110242
chico008
what the wookie says ?
Posté le 07-11-2011 à 20:44:30  profilanswer
 

Bah c'est le problème, la position n'est pas toujours la meme
le separateur lui est contant : au debut, après c'est que des espaces.
mais meme avec un Cut, je vois pas comment faire
 
je pensait au Awk, mais je suis trop limité pour savoir comment faire.


---------------
Serveur HFR - OpenTTD
n°2110248
mrbebert
Posté le 07-11-2011 à 21:16:31  profilanswer
 

C'est toujours la 1ère colonne après les ":" qui t'intéresse ?
Si oui :
cut -d ":" -f 2 | grep DEB | cut -d " " -f 1
- on garde ce qui est après les ":" (2ème colonne selon le séparateur ":" )
- on ne garde que les lignes ayant "DEB"
- on ne garde que la 1ère colonne, celle qui nous intéresse (à ce niveau, la partie avant les ":" n'existe plus, supprimée par le 1er "cut" )
 
Ca donne quoi ? :)


---------------
Doucement le matin, pas trop vite le soir.
n°2110256
chico008
what the wookie says ?
Posté le 07-11-2011 à 23:03:16  profilanswer
 

le DEB était pour l'exemple, parfois le DEB est pas le premier élément après les ':', car j'ai déjà penser au cut, mais parfois ca me donne pas la bonne chose.
Pour ca que je cherche une vrai méthode de recherche.


---------------
Serveur HFR - OpenTTD
n°2110260
mrbebert
Posté le 07-11-2011 à 23:22:27  profilanswer
 

Et un awk tout simple, ça ne marche pas ?
awk '
$3 ~ /DEB/ { print $3; }
$4 ~ /DEB/ { print $4; }
$5 ~ /DEB/ { print $5; }
$6 ~ /DEB/ { print $6; }
'
Les colonnes 1 et 2 étant l'entête et les ":"
(plus très sur de la syntaxe)


---------------
Doucement le matin, pas trop vite le soir.
n°2110273
chico008
what the wookie says ?
Posté le 08-11-2011 à 08:58:01  profilanswer
 

oui, mais le nombre de champs après les : est variables.
donc si vais mettons jusqu'a $6, ca ira pour un bon nombre, mais parfois la valeur recherche sera dans le reste.
Je pensait la même chose, mais avec un $NF et imprimer le $NF si ca correspond a ma recherche, mais il prend toujours la dernière valeur ...
Sinon je pensait faire une boucle dans Awk, pour lire chaque enregistrement, et l'afficher si c'est bon, mais je sais pas du tout comment coder les boucles dans Awk.


---------------
Serveur HFR - OpenTTD
n°2110309
mrbebert
Posté le 08-11-2011 à 10:53:51  profilanswer
 

Quelque chose de ce genre ?
awk '{
for (i = 3; i <= NF; i++) {
    if ($(i) ~ "DEB" ) { print $(i); }
}
}'
 
(modulo les 50 erreurs de syntaxe qu'il doit y avoir, je n'ai pas de machine Unix sous la main)


---------------
Doucement le matin, pas trop vite le soir.
n°2110356
chico008
what the wookie says ?
Posté le 08-11-2011 à 15:56:20  profilanswer
 

ca marche, super, merci.


---------------
Serveur HFR - OpenTTD

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

  [Shell UNIX] Recherche dans une ligne

 

Sujets relatifs
Exercice : Appliquer Format à toute une lignerecherche stagiaire/programmeur
Aligner 2 tableau et une Image sur la meme ligneRecherche requeteur gratuit en mode web
Lire dans un fichier puis associer une variable à chaque ligneQuestion Arborescence Unix !!
[resolu] batch ne dépasse pas la première ligne[RESOLU] [BASH] recherche et mise en forme synthétique de résultats
[Batch] Lancer une ligne de commande avec des paramètresPb avec shell_exec sous WinXP
Plus de sujets relatifs à : [Shell UNIX] Recherche dans une ligne


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