Я хочу отобразить последние 10 строк моего файла журнала, начиная с последней строки, как обычный читатель журнала. Я думал, что это будет вариация хвостовой команды, но я не могу найти ее нигде.
Строки выходных файлов от последнего до первого в Bash
Ответ 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 < некий файл