在Bash中输出从最后到第一个的文件行

时间:2011-11-05 01:16:03

标签: linux bash shell tail

我想显示我的日志文件的最后10行,从最后一行开始 - 就像普通的日志阅读器一样。我认为这将是tail命令的变体,但我无法在任何地方找到它。

5 个答案:

答案 0 :(得分:46)

GNU(Linux) uses the following

tail -n 10 <logfile> | tac

tail -n 10 <logfile>打印出日志文件的最后10行,而tac(cat拼写向后)会反转订单。

tail

BSD(OS X)使用-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

注意: BSD -r选项“GNU manual states只能反转最多与其缓冲区一样大的文件,通常为32 KiB” tac更可靠。如果缓冲区大小有问题并且您无法使用tac,则可能需要考虑使用在bash中编写功能的@ata's answer

答案 1 :(得分:13)

tac做你想要的。它与cat相反。

tail -10 logfile | tac

答案 2 :(得分:8)

我最终使用了tail -r,它在我的OSX上运行(tac没有)

tail -r -n10

答案 3 :(得分:2)

你可以用纯粹的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&lt; somefile

     

./ tailtac -10&lt; somefile

     

./ tailtac 100000&lt; somefile

     

./ tailtac&lt; somefile

答案 4 :(得分:2)

这是以相反顺序打印输出的完美方法

tail -n 10 <logfile>  | tac