|
下面使用 awk 简单模拟 head ,tail ,tac 这几个命令的基本功能。
测试文本:# cat record.txt
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25
1. 模拟 head 打印头 3 行内容# awk 'NR <= 3' record.txt
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
2. 模拟 tail 命令打印末尾 3 行内容# awk '{ buffer[NR % 3] = $0; } END { for (i = NR - 2; i < NR + 1; i++){ print buffer[i % 3] } }' record.txt
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25 上面, buffer[NR % 3] = $0; 这条语句实际是从第 1 条记录开始不断的往 buffer[] 数组里填充每行数据,但最终该数组也只有 3 条记录,这是个不断冲刷覆盖的过程,其中 $0 表示正在处理的当条记录的内容。最后,我们用一个 for 循环将最后的 3 条记录打印出来。
3. 模拟 tac 指令以倒序打印# awk '{buffer[NR] = $0; } END { for (i = NR; i > 0; i--) {print buffer} }' record.txt
5 10 15 20 25
4 9 14 19 24
3 8 13 18 23
2 7 12 17 22
1 6 11 16 21 该模拟过程比模拟 tail 更简单一些。 |
|