[Shell UNIX] Recherche dans une ligne

Recherche dans une ligne [Shell UNIX] - Shell/Batch - Programmation

Marsh Posté le 07-11-2011 à 19:39:17    

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
Reply

Marsh Posté le 07-11-2011 à 19:39:17   

Reply

Marsh Posté le 07-11-2011 à 19:52:37    

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

Marsh Posté le 07-11-2011 à 20:44:30    

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
Reply

Marsh Posté le 07-11-2011 à 21:16:31    

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

Marsh Posté le 07-11-2011 à 23:03:16    

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
Reply

Marsh Posté le 07-11-2011 à 23:22:27    

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

Marsh Posté le 08-11-2011 à 08:58:01    

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
Reply

Marsh Posté le 08-11-2011 à 10:53:51    

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

Marsh Posté le 08-11-2011 à 15:56:20    

ca marche, super, merci.


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

Sujets relatifs:

Leave a Replay

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