Je veux afficher les 10 dernières lignes de mon fichier journal, en commençant par la dernière ligne - comme un lecteur de journal normal. Je pensais que ce serait une variation de la commande tail, mais je ne trouve cela nulle part.
J'ai fini par utiliser tail -r
, qui fonctionnait sur mon OSX (tac
ne fonctionne pas)
tail -r -n10
GNU (Linux) tilise les éléments suivants :
tail -n 10 <logfile> | tac
tail -n 10 <logfile>
affiche les 10 dernières lignes du fichier journal et tac
(chat orthographié à l'envers) inverse l'ordre.
BSD (OS X) de tail
utilise le -r
option:
tail -r -n 10 <logfile>
Dans les deux cas , vous pouvez essayer ce qui suit:
if hash tac 2>/dev/null; then tail -n 10 <logfile> | tac; else tail -n 10 -r <logfile>; fi
REMARQUE: Le Le manuel GNU indique que le BSD -r
option "ne peut inverser que les fichiers qui sont au plus aussi gros que son tampon, qui est généralement de 32 Ko" et que tac
est plus fiable. Si la taille de la mémoire tampon est un problème et que vous ne pouvez pas utiliser tac
, vous pouvez envisager d'utiliser réponse de @ ata qui écrit la fonctionnalité dans bash.
tac
fait ce que vous voulez. C'est l'inverse de cat
.
tail -10 logfile | tac
Vous pouvez le faire avec du bash pur:
#!/bin/bash
readarray file
lines=$(( ${#file[@]} - 1 ))
for (( line=$lines, i=${1:-$lines}; (( line >= 0 && i > 0 )); line--, i-- )); do
echo -ne "${file[$line]}"
done
./tailtac 10 <unfichier
./tailtac -10 <unfichier
./tailtac 100000 <unfichier
./tailtac <unfichier
Ce sont les méthodes parfaites pour imprimer la sortie dans l'ordre inverse
tail -n 10 <logfile> | tac