Я хочу отобразить последние 10 строк моего файла журнала, начиная с последней строки - как обычный читатель журнала. Я думал, что это будет вариация хвостовой команды, но нигде не могу найти ее.
Строки выходного файла от последней к первой в Bash
Ответы (5)
GNU (Linux) использует следующее:
tail -n 10 <logfile> | tac
tail -n 10 <logfile>
распечатывает последние 10 строк файла журнала, а tac
(cat написано наоборот) меняет порядок.
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, который записывает функциональные возможности в баш.
tac
, не все из которых переносимы.
- person ephemient; 05.11.2011
tail -r -n 10 <logfile>
- лучший выбор. В качестве бонуса tail -r работает в системах, отличных от GNU, таких как OSX, Solaris, AIX и т. Д.
- person Bruno Bronosky; 03.12.2014
-r
.
- person Rick Smith; 04.12.2014
-r
, см. gnu.org/software/coreutils/manual/html_node/
- person m13r; 05.08.2016
tac
делает то, что вы хотите. Это противоположно cat
.
tail -10 logfile | tac
В итоге я использовал tail -r
, который работал на моем OSX (tac
нет)
tail -r -n10
root@elk:/# tail -r -n1 /var/log/logstash-test-output.log tail: invalid option -- 'r'
- person basickarl; 26.02.2016
Вы можете сделать это с помощью чистого 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 ‹некоторый файл
Это идеальный способ распечатать результат в обратном порядке.
tail -n 10 <logfile> | tac