曲径通幽论坛

标题: $0 与 NR [打印本页]

作者: beyes    时间: 2011-9-22 11:52
标题: $0 与 NR
$0 表示正在处理下的当前行内容。

比如有以下文本内容:
# cat temp.txt
abc     www     3201    3/13/11         30138
def     gro     3033    2/32/13         02901
xyz     dai     3010    8/81/11         10391
opq     lio     8901    7/18/38         31899
运行下面命令:
awk '{print $0}' temp.txt
abc     www     3201    3/13/11         30138
def     gro     3033    2/32/13         02901
xyz     dai     3010    8/81/11         10391
opq     lio     8901    7/18/38         31899
awk 依次处理每行内容,因此输出了整个记录。

再看下面的一个实例:
# awk '{ buf[NR % 2] = $0; } END { for (i=1; i<3; i++) {print buf[i%2] }}' temp.txt
xyz     dai     3010    8/81/11         10391
opq     lio     8901    7/18/38         31899
上面实际模拟了 tail 命令,打印了倒数的 2 行内容。

变量 NR 是 awk 内置变量,它记录了每条记录的记录号,记录号如同行号(一般情况下可以这么说,但是当一条记录由好几行组合在一起时这种说法就不正确了)。awk 每处理完一条记录后,NR 值会加 1 。仍然对上面的文本进行测试:
awk '{print NR, $0}' temp.txt
1 abc   www     3201    3/13/11         30138
2 def   gro     3033    2/32/13         02901
3 xyz   dai     3010    8/81/11         10391
4 opq   lio     8901    7/18/38         31899
由上可见,每行的前面都添加了一个行号。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2