Output file lines from last to first in Bash

萝らか妹 提交于 2019-11-27 10:00:02

问题


I want to display the last 10 lines of my log file, starting with the last line- like a normal log reader. I thought this would be a variation of the tail command, but I can't find this anywhere.


回答1:


GNU (Linux) uses the following:

tail -n 10 <logfile> | tac

tail -n 10 <logfile> prints out the last 10 lines of the log file and tac (cat spelled backwards) reverses the order.

BSD (OS X) of tail uses the -r option:

tail -r -n 10 <logfile>

For both cases, you can try the following:

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

NOTE: The GNU manual states that the BSD -r option "can only reverse files that are at most as large as its buffer, which is typically 32 KiB" and that tac is more reliable. If buffer size is a problem and you cannot use tac, you may want to consider using @ata's answer which writes the functionality in bash.




回答2:


tac does what you want. It's the reverse of cat.

tail -10 logfile | tac




回答3:


I ended up using tail -r, which worked on my OSX (tac doesn't)

tail -r -n10



回答4:


You can do that with pure 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 < somefile

./tailtac -10 < somefile

./tailtac 100000 < somefile

./tailtac < somefile




回答5:


This is the perfect methods to print output in reverse order

tail -n 10 <logfile>  | tac


来源:https://stackoverflow.com/questions/8017456/output-file-lines-from-last-to-first-in-bash

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!