effacer toutes les lignes sauf les 10 dernieres sans détruire le fichier
|
24-10-2013, 10h33
Message : #1
|
|
gruik
gouteur de savon Messages : 757 Sujets : 44 Points: 482 Inscription : Oct 2012 |
effacer toutes les lignes sauf les 10 dernieres sans détruire le fichier
j'ai hésité à poster dans les challenges de la communauté, en tous cas j'ai pas de solution pour le moment donc je suis preneur
on a un fichier de log, le but donc c'est de ne garder que les 10 dernieres lignes et effacer tout le reste, le tout sans opération destructive c'est à dire que si j'avais un tail -f sur mon fichier il doit pouvoir continuer de fonctionner, aka "inplace"
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure. Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau, L'Art poétique) |
|
24-10-2013, 14h06
Message : #2
|
|
levur
Membre Messages : 27 Sujets : 3 Points: 10 Inscription : Sep 2013 |
RE: effacer toutes les lignes sauf les 10 dernieres sans détruire le fichier
et si tu fais une redirection en boucle du style :
Citation :tail 10 -f le_log >> le_logou ça constitue une destruction de ton fichier ? ou encore tu stocke dans une var les 10 last ligne puis tu les insert dans ton fichier le tout avec un awk ? je saisi pas trop la != entre 'opération destructive' et 'effacer tout le reste' Citation :Staline a hérité d'une Russie à la charrue, et l'a laissée avec l'arme atomique,Churchill 1959 Chambre des Communes |
|
24-10-2013, 20h56
Message : #3
|
|
gruik
gouteur de savon Messages : 757 Sujets : 44 Points: 482 Inscription : Oct 2012 |
RE: effacer toutes les lignes sauf les 10 dernieres sans détruire le fichier
(24-10-2013, 14h06)levur a écrit : tail 10 -f le_log >> le_log wat ? non. non de toutes façons c'est moi qui n'étais pas réveillé ce matin et racontais passablement n'importe quoi en fait je pensais à quelque chose du genre Code : sed -i 1,$((`wc -l < fichier` - 10))d fichier la solution est simple, pas se casser la tête : Code : echo "$(tail -n10 fichier)" > fichier fin de l'histoire
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure. Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau, L'Art poétique) |
|
24-10-2013, 21h26
Message : #4
|
|
b0fh
Membre actif Messages : 210 Sujets : 17 Points: 309 Inscription : Jul 2012 |
RE: effacer toutes les lignes sauf les 10 dernieres sans détruire le fichier
La solution avec echo va foirer lamentablement passé une certaine taille (limitation de la taille max des arguments a une commande)
Ca fait lance run message d'erreur à tail, mais techniquement, pour effacer les n dernières lignes d'un fichier en préservant le reste, l'approche correcte est de faire un truncate, soit avec la commande idoine, soit avec dd: Code : truncate -s $((`wc -c <"$fichier"` - `tail -n $lignes |wc -c` )) "$fichier" Code : dd if=/dev/null bs=1 of="$fichier" seek=$((`wc -c <"$fichier"` - `tail -n $lignes |wc -c` )) |
|
« Sujet précédent | Sujet suivant »
|
Utilisateur(s) parcourant ce sujet : 3 visiteur(s)