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 19/10/2010, à 23:41

cayetanensis

[Résolu] Ne conserver que les dernières lignes d'un fichier

Bonjour,

Voilà, j''ai des fichiers de logs qui comportent des dizaines de lignes et qui grossissent à vue d'œil. Je cherche donc à trouver une astuce qui me permette de ne garder que les 10 dernières par exemple. J'avais pensé faire un truc du genre

tail machin.log > machin.log

Mais ça marche pas, le fichier machin.log ainsi créé est vide. Je comprends pas trop pourquoi. Du coup j'ai pas trop d'idée à part passer par un fichier temporaire, mais ça alourdi drôlement le code

tail machin.log > temp.log
cat temp.log > machin.log
rm temp.log

Ça marche mais ça me plaît pas. Quelqu'un a une meilleur idée ?

Dernière modification par cayetanensis (Le 20/10/2010, à 08:55)


cayetanensis

Hors ligne

#2 Le 19/10/2010, à 23:48

CNE007

Re : [Résolu] Ne conserver que les dernières lignes d'un fichier

tail -n50 le-non-du-fichier-dont-tu-veux-les 10-dernières-lignes > machin

pour ton info google peux aider ou man tail

Hors ligne

#3 Le 19/10/2010, à 23:52

cayetanensis

Re : [Résolu] Ne conserver que les dernières lignes d'un fichier

C'est gentil, mais avant de répondre google ou man à n'importe quelle question, essaie de la comprendre (tape cerveau dans google ou alors man cerveau ou bien cerveau --help wink )...

Mon problème c'est que je veux écrire directement dans le fichier que je lis sans passer par un fichier temporaire.


cayetanensis

Hors ligne

#4 Le 19/10/2010, à 23:56

biotechman

Re : [Résolu] Ne conserver que les dernières lignes d'un fichier

bonjour cayetanensis,

lors d'un post précédent http://forum.ubuntu-fr.org/viewtopic.php?id=423303, j'ai eus le même "problème". Il faut que tu passes par un fichier temporaire. D'autant plus que le fichier temporaire n'est pas forcément mauvais, en cas d'erreur, tu peux garder une trace.

#!/bin/bash
for i in $(ls *.log);do
    tail $i > tmp.log && cat tmp.log > $i || echo $i ": FAIL"
done
rm tmp.log

à la place du ls, tu peux mettre un find ou même enlever la boucle si c'est pour un fichier bien précis

Dernière modification par biotechman (Le 19/10/2010, à 23:57)


May the source be with you
http://biotechman.com/wordpress

Hors ligne

#5 Le 20/10/2010, à 01:31

Watael

Re : [Résolu] Ne conserver que les dernières lignes d'un fichier

for file in *log; do
   sed -i.bak ':a;$q;N;11,$D;ba' $file
done

si tes logs sont disséminés dans divers répertoires

find rep/départ -type f -iname "*log" -exec sed -i.bak ':a;$q;N;11,$D;ba' {} \;

à peu de chose près

Dernière modification par Watael (Le 20/10/2010, à 01:34)


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

Hors ligne

#6 Le 20/10/2010, à 08:54

cayetanensis

Re : [Résolu] Ne conserver que les dernières lignes d'un fichier

Fantastique, c'est exactement ce que je cherchais. Ça marche, mais par contre va falloir que je me penche sur ta syntaxe sed parce que là c'est un peu au-delà de mes compétences...

Bref j'ai intégré

sed -i ':a;$q;N;11,$D;ba' $HISTORIQUE

et du coup j'ai des historiques qui dépassent jamais 10 lignes.

Merci beaucoup !


cayetanensis

Hors ligne

#7 Le 20/10/2010, à 14:20

Totor

Re : [Résolu] Ne conserver que les dernières lignes d'un fichier

Bonjour,

Une autre solution :

tail -n 10 "${HISTORIQUE}" > >(tee > "${HISTORIQUE}")

Note : il est important d'utiliser la substitution de processus et non un pipeline


-- Lucid Lynx --

Hors ligne

#8 Le 08/11/2010, à 19:25

Postmortem

Re : [Résolu] Ne conserver que les dernières lignes d'un fichier

Salut Watael,
Tu me ferais une pitite explication de ton sed stp ?!?

Watael a écrit :
for file in *log; do
   sed -i.bak ':a;$q;N;11,$D;ba' $file
done

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne