Recherche dans une ligne [Shell UNIX] - Shell/Batch - Programmation
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.
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.
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 ?
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.
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)
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.
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)
Marsh Posté le 08-11-2011 à 15:56:20
Reply
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