簡體   English   中英

在Bash中輸出從最后到第一個的文件行

[英]Output file lines from last to first in Bash

我想顯示我的日志文件的最后10行, 從最后一行開始 - 就像普通的日志閱讀器一樣。 我認為這將是tail命令的變體,但我無法在任何地方找到它。

GNU(Linux) 使用以下內容

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

注意: GNU手冊指出 BSD -r選項“只能反轉最多與其緩沖區一樣大的文件,通常為32 KiB”,並且tac更可靠。 如果緩沖區大小有問題並且您無法使用tac ,您可能需要考慮使用@ ata的答案 ,該答案將功能寫入bash。

tac做你想要的。 這是cat的逆轉。

tail -10 logfile | tac

我最終使用tail -r ,它在我的OSX上工作( tac沒有)

tail -r -n10

這是以相反順序打印輸出的完美方法

tail -n 10 <logfile>  | tac

你可以用純粹的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM