如何使用awk命令反向显示文件指定行(如第3-5行)
嘿,刚上手awk不用焦虑,这个需求其实有几种简洁的实现方式,我给你一步步讲清楚:
方法一:纯awk实现(无需额外工具)
这种方法完全用awk搞定,兼容性最好,适合所有支持awk的系统:
awk 'NR>=3 && NR<=5 {lines[++count]=$0} END {for(i=count;i>=1;i--) print lines[i]}' your_file.txt
代码拆解:
NR>=3 && NR<=5:NR是awk内置的当前行号变量,这个条件用来筛选出文件的第3到第5行lines[++count]=$0:把符合条件的每一行($0代表整行内容)存入一个叫lines的数组里,count是计数器,每存一行就自动加1,用来记录我们一共存了多少行END块:这部分会在awk读完整个文件后执行,我们从数组的最后一个元素(也就是count对应的下标)开始,倒序循环打印数组里的内容,就实现了反向输出
方法二:结合sed+tac(更直观)
如果你觉得纯awk的数组操作有点绕,也可以用两个简单的工具组合,代码更短:
sed -n '3,5p' your_file.txt | tac
代码拆解:
sed -n '3,5p':sed的-n参数表示不默认打印所有行,3,5p指定只打印第3到第5行tac:这是一个专门用来倒序输出内容的工具(可以理解为cat的反向),它会把输入的行从最后一行开始往前打印,正好满足反向输出的需求
注意:如果你的系统没有
tac(比如一些比较老的UNIX系统),那还是用第一种纯awk的方法更稳妥。
内容的提问来源于stack exchange,提问作者user8644893
相关产品推荐
相关产品推荐

