Lignes de fichier de sortie du dernier au premier dans Bash

Je souhaite 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 de queue, mais je ne peux pas trouver cela n’importe où.

GNU (Linux) utilise les éléments suivants :

tail -n 10  | tac 

tail -n 10 affiche les 10 dernières lignes du fichier journal et tac (cat orthographié à l’envers) inverse l’ordre.

BSD (OS X) de tail utilise l’option -r :

 tail -r -n 10  

Pour les deux cas , vous pouvez essayer ce qui suit:

 if hash tac 2>/dev/null; then tail -n 10  | tac; else tail -n 10 -r ; fi 

NOTE: Le manuel GNU stipule que l’option BSD -r “ne peut inverser que les fichiers qui sont au maximum aussi volumineux que son tampon, qui est généralement de 32 Ko” et que tac est plus fiable. Si la taille du tampon est un problème et que vous ne pouvez pas utiliser tac , vous pouvez envisager d’utiliser la réponse de @ ata qui écrit les fonctionnalités dans bash.

tac fait ce que tu veux. C’est l’inverse du cat .

tail -10 logfile | tac

J’ai fini par utiliser tail -r , qui fonctionnait sur mon OSX (pas de tac )

 tail -r -n10 

Ce sont les méthodes parfaites pour imprimer les résultats dans l’ordre inverse

 tail -n 10  | tac 

Vous pouvez le faire avec pure bash:

 #!/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

./tailtac -10

./tailtac 100000

./tailtac