Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/12/2018, à 14:24

Nuliel

[Résolu] sélectionner des lignes selon un critère

Bonjour,

J'ai un fichier texte donc voici un bout qui se répète 2600 fois environ:

No.     Time           Info
   2704 1413.613987745 HTTP/1.1 200 OK  (text/html)

Frame 2704: 426 bytes on wire (3408 bits), 426 bytes captured (3408 bits) on interface 0
Ethernet II, Src: RealtekU_b3:c4:5d (52:54:00:b3:c4:5d), Dst: RealtekU_a5:1f:aa (52:54:00:a5:1f:aa)
Internet Protocol Version 4, Src: 192.168.122.170, Dst: 192.168.122.1
Transmission Control Protocol, Src Port: 443, Dst Port: 39268, Seq: 28060, Ack: 27865, Len: 360
Secure Sockets Layer
Hypertext Transfer Protocol
Line-based text data: text/html (1 lines)

J'aimerais récupérer la ligne

   2704 1413.613987745 HTTP/1.1 200 OK  (text/html)

Comment réussir à extraire toutes ces lignes? J'ai cherché du côté de sed mais je maitrise pas du tout.

La ligne

No.     Time           Info

apparaît à chaque fois avant la ligne à récupérer, j'imagine qu'il faut se baser dessus pour récupérer les lignes recherchées.

Dernière modification par Nuliel (Le 27/12/2018, à 15:19)

Hors ligne

#2 Le 27/12/2018, à 14:29

diesel

Re : [Résolu] sélectionner des lignes selon un critère

Essaye un

grep -A 1 "No." mon_fichier | grep -v "No." | grep -v "-"

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 27/12/2018, à 14:33)


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#3 Le 27/12/2018, à 14:52

pingouinux

Re : [Résolu] sélectionner des lignes selon un critère

Bonjour,

@Naziel : Tu aurais dû montrer ta commande

@diesel83140 : Tu peux simplifier un peu

grep -A 1 "No\." mon_fichier | egrep -v "No\.|-"

Autre méthode :

awk '/^No\./{getline;print}' mon_fichier

Édité :
Ou bien

sed -n "/^No\./{n;p}" mon_fichier

Dernière modification par pingouinux (Le 27/12/2018, à 14:57)

Hors ligne

#4 Le 27/12/2018, à 15:13

Nuliel

Re : [Résolu] sélectionner des lignes selon un critère

Merci à vous deux.
J'ai essayé d'adapter

cat bidule | sed -n '1~2p'

qui prend une ligne sur 2, j'ai essayé d'adapter pour prendre à partir de la deuxième ligne et toutes les 11 lignes mais ça colle pas sur tout le fichier.

Nickel, ça fonctionne. Merci beaucoup!
J'avais pas pensé à l'option -A de grep, pas bête!

Pourrais tu expliquer les deux commandes à base de awk et sed? A quoi correspond n et p dans la commande sed?

Dernière modification par Nuliel (Le 27/12/2018, à 15:16)

Hors ligne

#5 Le 27/12/2018, à 15:55

Watael

Re : [Résolu] sélectionner des lignes selon un critère

au plus simple :
qu'est-ce qui, sur cette ligne, te fait dire que tu dois la récupérer ?
une information qu'elle affiche a une certaine forme constante qui la distingue des autres ?

il faut vraiment que la ligne que je veux afficher soit très très indistincte pour que j'en cherche une autre comme motif.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 27/12/2018, à 16:02

Nuliel

Re : [Résolu] sélectionner des lignes selon un critère

En fait, comme le numéro des paquets augmente, que le temps varie pas mal, et que les requêtes sont différentes, j'avais pour idée de partir sur la ligne du dessus qui ne change jamais.

C'est clair que grep était clairement le plus simple.

Hors ligne

#7 Le 27/12/2018, à 16:11

Watael

Re : [Résolu] sélectionner des lignes selon un critère

des chiffres, un espace, des chiffres, un point, des chiffres, un espace, HTTP/1.1 (toujours?)...


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 27/12/2018, à 16:18

Nuliel

Re : [Résolu] sélectionner des lignes selon un critère

En gros, les deux lignes récupérées qui sont récupérées beaucoup de fois.

    
134 9.665337838    GET /?id=machinbidule; HTTP/1.1 
136 12.667098151   HTTP/1.1 200 OK  (text/html)

Le premier nombre correspond au numéro du paquet, ici ça n'augmente pas toujours de 1 en 1 parce que j'ai déjà enlevé des paquets non utiles.
Le deuxième nombre est le temps écoulé depuis le début de la capture réseau, ça n'augmente pas linéairement et c'est surtout cette info qui m'intéresse (je mesure le temps entre la demande et la réponse en fait)
La troisième partie est soit une demande, soit une réponse, sachant que ce n'est pas la même demande à chaque fois (GET /?id=machinbidule varie donc)

Hors ligne

#9 Le 27/12/2018, à 16:27

Watael

Re : [Résolu] sélectionner des lignes selon un critère

donc
des chiffres, un blanc, des chiffres, un point, des chiffres, un blanc, et "n'importe quoi"

grep '[0-9]\+[[:blank:]][0-9]\+\.[0-9].*' fichier

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#10 Le 27/12/2018, à 16:44

Nuliel

Re : [Résolu] sélectionner des lignes selon un critère

Watael a écrit :

des chiffres, un blanc, des chiffres, un point, des chiffres, un blanc, et "n'importe quoi"

Exactement

Ca fonctionne aussi! Il y a vraiment 15000 façons de résoudre ce problème en fait smile

Le \ sert à échapper le + et . c'est bien ça?

Hors ligne

#11 Le 27/12/2018, à 18:21

pingouinux

Re : [Résolu] sélectionner des lignes selon un critère

Naziel #4 a écrit :

Pourrais tu expliquer les deux commandes à base de awk et sed? A quoi correspond n et p dans la commande sed?

awk '/^No\./{getline;print}' mon_fichier

/^No\./ : Recherche de la ligne commençant par No.
{getline;print} : Lecture de la ligne suivante et impression

sed -n "/^No\./{n;p}" mon_fichier

Fonctionne de la même façon :
-n : Pour ne pas imprimer les lignes si on ne le demande pas
/^No\./ : Recherche de la ligne commençant par No.
{n;p} : Lecture de la ligne suivante et impression

Hors ligne

#12 Le 27/12/2018, à 18:50

Nuliel

Re : [Résolu] sélectionner des lignes selon un critère

Merci pingouinux pour l'explication!

Hors ligne

#13 Le 27/12/2018, à 21:11

diesel

Re : [Résolu] sélectionner des lignes selon un critère

pingouinux a écrit :

Bonjour,

@diesel83140 : Tu peux simplifier un peu

grep -A 1 "No\." mon_fichier | egrep -v "No\.|-"

Oui, je sais, je suis un peu bourrin... wink big_smile big_smile big_smile

Amicalement.

Jean-Marie


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne