#1 Le 27/12/2018, à 13: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, à 14:19)
Hors ligne
#2 Le 27/12/2018, à 13: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, à 13: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, à 13: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, à 13:57)
Hors ligne
#4 Le 27/12/2018, à 14: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, à 14:16)
Hors ligne
#5 Le 27/12/2018, à 14: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, à 15: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, à 15: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, à 15: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, à 15: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, à 15:44
- Nuliel
Re : [Résolu] sélectionner des lignes selon un critère
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
Le \ sert à échapper le + et . c'est bien ça?
Hors ligne
#11 Le 27/12/2018, à 17:21
- pingouinux
Re : [Résolu] sélectionner des lignes selon un critère
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, à 17: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, à 20:11
- diesel
Re : [Résolu] sélectionner des lignes selon un critère
Bonjour,
@diesel83140 : Tu peux simplifier un peu
grep -A 1 "No\." mon_fichier | egrep -v "No\.|-"
Oui, je sais, je suis un peu bourrin...
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