Строки выходного файла от последнего к первому в Bash - PullRequest
31 голосов
/ 05 ноября 2011

Я хочу отобразить последние 10 строк моего файла журнала, , начиная с последней строки - как обычный читатель журнала.Я думал, что это будет разновидностью команды tail, но я нигде не могу ее найти.

Ответы [ 5 ]

46 голосов
/ 05 ноября 2011

GNU (Linux) использует следующее :

tail -n 10 <logfile> | tac

tail -n 10 <logfile> выводит последние 10 строк файла журнала и tac (кошка записана в обратном направлении) меняет порядок в обратном порядке.

BSD (OS X) из tail использует параметр -r:

tail -r -n 10 <logfile>

Для обоихВ случаях вы можете попробовать следующее:

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

ПРИМЕЧАНИЕ: В руководстве GNU указано, что опция BSD -r "может только обратить файлы назадони не больше его буфера, который обычно составляет 32 КиБ, и что tac более надежно.Если размер буфера является проблемой, и вы не можете использовать tac, вы можете рассмотреть возможность использования @ ata's answer , который записывает функциональность в bash.

13 голосов
/ 05 ноября 2011

tac делает то, что вы хотите. Это обратное cat.

tail -10 logfile | tac

8 голосов
/ 07 ноября 2011

Я использовал tail -r, который работал на моем OSX (tac нет)

tail -r -n10
2 голосов
/ 02 июля 2014

Это идеальный способ распечатать вывод в обратном порядке.

tail -n 10 <logfile>  | tac
2 голосов
/ 05 ноября 2011

Вы можете сделать это с помощью чистого 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

...