Подтвердить что ты не робот

Строки выходных файлов от последнего до первого в Bash

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

4b9b3361

Ответ 1

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

tail -r -n10

Ответ 2

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 KiB" и что tac является более надежным. Если размер буфера является проблемой, и вы не можете использовать tac, вам может потребоваться использовать ответ @ata, который записывает функциональные возможности в bash.

Ответ 3

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

tail -10 logfile | tac

Ответ 4

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

tail -n 10 <logfile>  | tac

Ответ 5

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