You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shell中从最后一行到第一行读取文件并反向打印指定行数?

嘿,这个需求在Shell里有好几种实用的实现方式,我给你分享几个常用的方案:

方法1:用tac + head(最直观高效)

tac是专门用来反向输出文件内容的工具,它会直接把文件从最后一行到第一行打印出来。如果要限制最多输出50行,搭配head截取前50行就完美解决:

tac your_file.txt | head -n 50

举个实际例子,假设你的文件test.txt内容是:

ant
ball
cat
dog
elephant

执行命令后会输出:

elephant
dog
cat
ball
ant

如果文件本身行数少于50,命令会自动输出所有行的反向内容,完全符合你的需求。

方法2:用sed实现(兼容无tac的老系统)

有些老旧的Unix系统可能没有tac命令,这时候可以用sed的脚本实现反向读取,同样搭配head限制行数:

sed '!G;h;$!d' your_file.txt | head -n 50

简单解释下这个sed脚本的逻辑:

  • !G:除最后一行外,把保持空间的内容追加到当前行后面
  • h:把当前行的内容复制到保持空间
  • $!d:除最后一行外,删除当前行的内容
    最终就能实现文件内容的反向输出。
方法3:用awk自定义逻辑(灵活可控)

如果需要更灵活的控制,比如自定义输出行数的计算,awk是个好选择。思路是先把所有行存入数组,再从最后一行开始往前遍历,最多输出50行:

awk '{lines[NR] = $0} END {for (i=NR; i>=max(1, NR-49); i--) print lines[i]}' your_file.txt

这里NR是当前处理的行号,max(1, NR-49)保证了当文件行数不足50时,不会出现负数索引,会从第一行开始反向输出所有内容。


内容的提问来源于stack exchange,提问作者Paiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:27:25