Page 1 sur 1

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

Publié : lun. 8 févr. 2016 11:55
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 !

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

Publié : lun. 8 févr. 2016 11:58
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)

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

Publié : lun. 8 févr. 2016 11:58
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

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

Publié : lun. 8 févr. 2016 12:03
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é.

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

Publié : lun. 8 févr. 2016 12:04
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

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

Publié : lun. 8 févr. 2016 12:11
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

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

Publié : mar. 9 févr. 2016 11:57
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

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

Publié : mar. 9 févr. 2016 12:04
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

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

Publié : mar. 9 févr. 2016 12:08
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

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

Publié : sam. 30 juil. 2016 18:56
par yoplait21
merci ubuntu ? ... ok je sors ..... :)

edit : rho putain le déterrage .... ok j'assume :sol:

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

Publié : sam. 30 juil. 2016 22:58
par Zedoune
merci ubuntu ? ... ok je sors ..... :)
gné ? :D

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

Publié : dim. 31 juil. 2016 13:53
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

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

Publié : dim. 31 juil. 2016 13:58
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