曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3216|回复: 0
打印 上一主题 下一主题

$0 与 NR

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-9-22 11:52:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
$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
由上可见,每行的前面都添加了一个行号。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-17 19:03 , Processed in 0.061913 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表