Shell 以逆序形式打印行

Shell 以逆序形式打印行,可以用来在 Bash 中模拟栈结构。最简单的实现方法是使用tac命令。当然也可以用awk来搞定。

Shell以逆序形式打印行

实战演练

先来试试tac
(1) 该命令的语法如下:

tac file1 file2 ...

它也可以从stdin中读取输入:

$ seq 5 | tac
5
4
3
2
1

tac命令默认使用\n作为行分隔符。但我们也可以用选项-s指定其他分隔符。

$ echo "1,2" | tac-s,
2
1

(2) 使用awk的实现方式如下:

seq 9 | \
  awk '{ lifo[NR]=$0 } \
    END { for(lno=NR;lno>-1;lno--){ print lifo[lno]; }
        }'

在shell脚本中,\可以很方便地将单行命令拆解成多行。

工作原理

这个awk脚本将每一行都存入关联数组中,用行号作为数组索引(行号由NR给出)。读取完所有的行之后,awk执行END语句块。变量NR是由awk维护的。该变量中保存了当前行号。当awk开始执行END语句块时,NR中的值就是总行数。在{ }语句块中使用lno=NR,从最后一行迭代到行号为0的第一行,同时以逆序形式打印出所有的行。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Shell 实例