awk里的NR和FNR什么区别 z

本文详细解释了在使用AWK处理单个及多个文件时,NR(总的记录数)与FNR(当前文件的记录数)的区别。通过具体的示例展示了这两种计数方式的不同之处。

对于单个 文件NR 和FNR 的 输出结果一样的 :
# awk '{print NR,$0}' file1
1 a b c d
2 a b d c
3 a c b d
4 a c d b
5 a d c b
6 a d b c
awk '{print FNR,$0}' file1
1 a b c d
2 a b d c
3 a c b d
4 a c d b
5 a d c b
6 a d b c
但是对于多个文件 :
# awk '{print NR,$0}' file1 file2
1 a b c d
2 a b d c
3 a c b d
4 a c d b
5 a d c b
6 a d b c
7 aa bb cc dd
8 aa bb dd cc
9 aa cc bb dd
10 aa cc dd bb
11 aa dd bb cc
12 aa dd cc bb
# awk '{print FNR,$0}' file1 file2
1 a b c d
2 a b d c
3 a c b d
4 a c d b
5 a d c b
6 a d b c
1 aa bb cc dd
2 aa bb dd cc
3 aa cc bb dd
4 aa cc dd bb
5 aa dd bb cc
6 aa dd cc bb
看书上说的是 :FNR表示当前文件的记录数 NR表示到此为止的记录数

<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
AWK是一种强大的文本处理工具,其丰富的内置变量在编写AWK脚本时起着至关重要的作用。以下是一些标准的AWK内置变量及其说明默认值: | 变量 | 说明 | 默认值 | | --- | --- | --- | | ARGC | 表示在命令行提供的参数的个数 | - | | ARGV | 命令行输入的参数数组,索引从0开始 | - | | CONVFMT | 数据转换为字符串的格式 | %.6g | | OFMT | 数值输出格式 | %.6g | | ENVIRON | 环境变量数组 | - | | FILENAME | 当前文件名称 | - | | FS | 输入列之间的分隔符 | 空格 | | NF | 当前输入记录中域的数量 | - | | NR | 当前记录的数量 | - | | FNR | 当前文件的NR | - | | OFS | 输出列之间的分割符 | 空格 | | ORS | 行间分割符 | 换行符 | | RLENGTH | match匹配字符串长度 | - | | RS | 输入行的分割符 | 换行符 | | RSTART | match匹配字符串的首字符的位置 | - | | SUBSEP | 数组下标的分割行符 | \034 | | $0 | 整个输入记录 | - | | $n | 当前输入的第n列 | - | [^2] 在实际使用中,这些内置变量可以方便地完成各种文本处理任务。例如,设置输入列分隔符可以使用`FS`变量,示例代码如下: ```awk [chengmo@localhost ~]$ awk 'BEGIN{FS=":";print "ARGC="ARGC;for(k in ARGV) {print k"="ARGV[k]; }} /etc/passwd ``` 此代码将输入列分隔符设置为冒号,并打印命令行参数的相关信息 [^3]。 另外,使用`match`函数时会涉及`RSTART``RLENGTH`变量,示例如下: ```awk [chengmo@localhost ~]$ awk 'BEGIN{start=match("this is a test",/[a-z]+$/); print start, RSTART, RLENGTH }' ``` 此代码使用`match`函数匹配字符串,并打印匹配的起始位置长度 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值