Unix : trouver les n dernières occurences dans un fichier

Répondre
Avatar de l’utilisateur
Zedoune
Messages : 15343
Inscription : ven. 12 janv. 2018 17:44

Unix : trouver les n dernières occurences dans un fichier

Message par Zedoune »

Bonjour !

Aujourd'hui la question Comment récupérer rapidement les n dernières occurrences d'un motif dans un gros fichier texte ?

Car oui, j'ai mon fichier texte qui fait 15 Mo, je ne peux pas faire un tail parce qu'il faudrait prendre un certain nombre de lignes inconnu et ça pourrait ne pas marcher à tous les coups. Faire un grep sur le fichier avec un tail derrière, c'est long car on parcourt tout pour ne garder que les dernières occurences. La technique ?! Utiliser tac ! C'est comme cat mais à l'envers (mais ligne par ligne, il fait pas à l'envers complètement)

donc

linux :
tac $FICHIER | grep motif | head -n $NB_OCCURENCES

freebsd :
tail -r $FICHIER | grep motif | head -n $NB_OCCURENCES

(sous linux tac existe mais pas sous freebsd, sous freebsd tail peut faire tac avec -r mais le tail de linux n'a pas cette option)

Elles arriveront pas dans l'ordre, la première occurence étant la toute dernière, suffit de rajouter | tac pour remettre dans le bon ordre si nécessaire :)
Voilou !
Avatar de l’utilisateur
dsebire
Messages : 13158
Inscription : ven. 12 janv. 2018 17:44
Localisation : Loiret - entre la ville et les champs

Unix : trouver les n dernières occurences dans un fichier

Message par dsebire »

je vois pas la différence avec un simple grep puisque tu vas quand même parcourir tout le fichier (a l'envers mais ça change rien)
Avatar de l’utilisateur
Zedoune
Messages : 15343
Inscription : ven. 12 janv. 2018 17:44

Unix : trouver les n dernières occurences dans un fichier

Message par Zedoune »

je vois pas la différence avec un simple grep puisque tu vas quand même parcourir tout le fichier (a l'envers mais ça change rien)
non car tu utilises un pipe, quand head aura atteint son objectif, la commande totale s'arrête
Avatar de l’utilisateur
dsebire
Messages : 13158
Inscription : ven. 12 janv. 2018 17:44
Localisation : Loiret - entre la ville et les champs

Unix : trouver les n dernières occurences dans un fichier

Message par dsebire »

euh....
t sur ?
pour moi ça travaille pas ligne par ligne (ce que tu sous entend) mais en asynchrone. (heureusement d'ailleurs sinon perfs minables)
si ton tac va plus vite que ton grep par ex (ce qui est quasi certain), tu va remplir le pipe (buffer) ce qui fait que tu vas quand même lire le fichier en entier ou presque.
bon évidement, il va arrêter de lire lorsque le fifo du pipe aura attend la limite, mais sur les pipe, c'est assez élevé.
Avatar de l’utilisateur
dsebire
Messages : 13158
Inscription : ven. 12 janv. 2018 17:44
Localisation : Loiret - entre la ville et les champs

Unix : trouver les n dernières occurences dans un fichier

Message par dsebire »


non car tu utilises un pipe, quand head aura atteint son objectif, la commande totale s'arrête
PS: je suis le seul a avoir l'esprit très mal placé ?????? :D :D
Avatar de l’utilisateur
Zedoune
Messages : 15343
Inscription : ven. 12 janv. 2018 17:44

Unix : trouver les n dernières occurences dans un fichier

Message par Zedoune »

PS: je suis le seul a avoir l'esprit très mal placé ?????? :D :D
Ouais, j'avais pas remarqué mais maintenant que tu le dis, je suis morte de rire au boulot j'essaie de pas pouffer :lol: :whistle: :whistle:

Je ne sais pas la taille des différents buffer mais ils ne sont pas très gros normalement, et si tu demandes que une occurrence, ça devrait aller très vite. Je vais essayer de faire un test

PS : je viens de taper "man tail" c'est malin maintenant je vais penser à autre chose !!! :o :o
Avatar de l’utilisateur
Zedoune
Messages : 15343
Inscription : ven. 12 janv. 2018 17:44

Unix : trouver les n dernières occurences dans un fichier

Message par Zedoune »

euh....
t sur ?
pour moi ça travaille pas ligne par ligne (ce que tu sous entend) mais en asynchrone. (heureusement d'ailleurs sinon perfs minables)
si ton tac va plus vite que ton grep par ex (ce qui est quasi certain), tu va remplir le pipe (buffer) ce qui fait que tu vas quand même lire le fichier en entier ou presque.
bon évidement, il va arrêter de lire lorsque le fifo du pipe aura attend la limite, mais sur les pipe, c'est assez élevé.
La taille du buffer du pipe est défini avec ulimit (ulimit -a pour toutes les infos, et ulimit -p pour avoir le nombre)

Sous freebsd elle est par défaut de 1x512 bytes, sous Linux (Debian 6 et Ubuntu 14.04) 8x512 bytes, donc je pense pas que tu parcoures complètement ton fichier avec tac :P
Avatar de l’utilisateur
dsebire
Messages : 13158
Inscription : ven. 12 janv. 2018 17:44
Localisation : Loiret - entre la ville et les champs

Unix : trouver les n dernières occurences dans un fichier

Message par dsebire »

je voyais ça bcp plus gros ;)
pt 'être des modifs faites sur les bécanes sur lesquelles je bossais avant.
aujourd'hui suis a 8*512
Avatar de l’utilisateur
Zedoune
Messages : 15343
Inscription : ven. 12 janv. 2018 17:44

Unix : trouver les n dernières occurences dans un fichier

Message par Zedoune »

je voyais ça bcp plus gros ;)
pt 'être des modifs faites sur les bécanes sur lesquelles je bossais avant.
aujourd'hui suis a 8*512
oui j'étais étonnée de voir que c'était aussi petit ! :)

C'est important d'être précis [:al0y]
Maintenant j'essaie toujours de trouver des sources fiables d'informations, parce que de plus en plus sur internet on patauge dans la médiocrité et du copier-coller
yoplait21
Messages : 131
Inscription : ven. 12 janv. 2018 17:44

Unix : trouver les n dernières occurences dans un fichier

Message par yoplait21 »

merci ubuntu ? ... ok je sors ..... :)

edit : rho putain le déterrage .... ok j'assume :sol:
Avatar de l’utilisateur
Zedoune
Messages : 15343
Inscription : ven. 12 janv. 2018 17:44

Unix : trouver les n dernières occurences dans un fichier

Message par Zedoune »

merci ubuntu ? ... ok je sors ..... :)
gné ? :D
yoplait21
Messages : 131
Inscription : ven. 12 janv. 2018 17:44

Unix : trouver les n dernières occurences dans un fichier

Message par yoplait21 »

"Maintenant j'essaie toujours de trouver des sources fiables d'informations, parce que de plus en plus sur internet on patauge dans la médiocrité et du copier-coller" ....

perso je fais une relation entre ubuntu et cet état de fait :x
Avatar de l’utilisateur
Zedoune
Messages : 15343
Inscription : ven. 12 janv. 2018 17:44

Unix : trouver les n dernières occurences dans un fichier

Message par Zedoune »

"Maintenant j'essaie toujours de trouver des sources fiables d'informations, parce que de plus en plus sur internet on patauge dans la médiocrité et du copier-coller" ....

perso je fais une relation entre ubuntu et cet état de fait :x
Nan pour le coup y a pas de rapport :D
Répondre