awk内置变量之OFMT、CONVFMT、RLENGTH、RSTART
来源:互联网 发布:淘宝换货售后卡怎么写 编辑:程序博客网 时间:2024/03/29 23:05
本篇文章主要简述以下awk内置变量:
表示数字的输出格式,初始是"%.6g",表示一共只输出6位(不包括小数点)。如果是"%.6g",则表示小数点后保留6位
例1:默认格式输出数字
qingsong@db2a:~$ awk '
> BEGIN {
> NUM = 3020112.12456
> print NUM
> }'
3.02011e+06
例2:通过设置OFMT控制输出格式
qingsong@db2a:~$ awk '
> BEGIN { PI = 3.141592653
> print "Default format:", PI
> OFMT = "%.1g"
> print "%.1g:", PI
> OFMT = "%.3g"
> print "%.3g:", PI
> OFMT = "%.8g"
> print "%.8g:", PI
> OFMT = "%.1f"
> print "%.1f:", PI
> OFMT = "%.3f"
> print "%.3f:", PI
> OFMT = "%.8f"
> print "%.8f:", PI
> }'
Default format: 3.14159
%.1g: 3
%.3g: 3.14
%.8g: 3.1415927
%.1f: 3.1
%.3f: 3.142
%.8f: 3.14159265
qingsong@db2a:~$
CONVFMT 表示数字转换为字符串之后,输出的格式。在讲这个变量之前,需要先知道一点,awk只有两种类型的变量:数字和字符串,如果要进行类型转换,可以通过下面的方法:
字符串转数字: string + 0
数字转字符串: number ""
例1:
下面的例子将数字PI转换为字符串输出,并且只输出3位:
qingsong@db2a:~$ awk '
> BEGIN { PI = 3.141592653
> CONVFMT = "%.3g"
> print PI""
> }'
3.14
qingsong@db2a:~$
注意,设置OFMT是没用的,因为它只是控制数字的输出格式,而PI""是由数字转化的字符串,不受其控制:
qingsong@db2a:~$ awk '
> BEGIN { PI = 3.141592653
> OFMT = "%.3g"
> print PI""
> }'
3.14159
qingsong@db2a:~$
首先需要知道内置函数match(s,r)的作用,s是代表字符串,r代表正则表达式,match的作用是返回匹配r的子串在s中的首个位置
例如,正则表达式 "[+-]?[0-9]+"表示一个整数,那么match("hello+1234","[+-]?[0-9]+")返回值是6,因为从第6位开始是个数字:
qingsong@db2a:~$ awk 'BEGIN { print match("hello+1234","[+-]?[0-9]+") }'
6
RSTART就是match函数的返回值,RLENGTH表示被匹配的子串的长度
例1:下面的例子中,"aaa+"在"baacaaa"中第5个位置开始出现,所以RSTART为5;匹配的子串为"aaa",长度为3,所以RLENGTH为3
qingsong@db2a:~$ awk '
> BEGIN {
> match("baacaaa", "aaa+")
> print RSTART, RLENGTH
> }'
5 3
qingsong@db2a:~$
例2:下面的例子中,使用substr函数打印了匹配的子串,substr第2个参数表示子串开始位置,第3个参数表示子串长度:
qingsong@db2a:~$ awk '
> BEGIN {
> s = "hello-1234x"
> r = "[+-]?[0-9]+"
> match(s, r)
> print substr(s, RSTART,RLENGTH)
> }'
-1234
qingsong@db2a:~$
参考资料:
《The AWK Programming Language》
《Sed and Awk 101 Hacks》
OFMT format for printing numbers; initially = "%.6g".
CONVFMT format for internal conversion of numbers to string, initially ="%.6g".
RLENGTH length set by the last call to the built-in function, match().
RSTART index set by the last call to match().
1. OFMT
OFMT format for printing numbers; initially = "%.6g".
表示数字的输出格式,初始是"%.6g",表示一共只输出6位(不包括小数点)。如果是"%.6g",则表示小数点后保留6位
例1:默认格式输出数字
qingsong@db2a:~$ awk '
> BEGIN {
> NUM = 3020112.12456
> print NUM
> }'
3.02011e+06
例2:通过设置OFMT控制输出格式
qingsong@db2a:~$ awk '
> BEGIN { PI = 3.141592653
> print "Default format:", PI
> OFMT = "%.1g"
> print "%.1g:", PI
> OFMT = "%.3g"
> print "%.3g:", PI
> OFMT = "%.8g"
> print "%.8g:", PI
> OFMT = "%.1f"
> print "%.1f:", PI
> OFMT = "%.3f"
> print "%.3f:", PI
> OFMT = "%.8f"
> print "%.8f:", PI
> }'
Default format: 3.14159
%.1g: 3
%.3g: 3.14
%.8g: 3.1415927
%.1f: 3.1
%.3f: 3.142
%.8f: 3.14159265
qingsong@db2a:~$
2. CONVFMT
CONVFMT format for internal conversion of numbers to string, initially = "%.6g".
CONVFMT 表示数字转换为字符串之后,输出的格式。在讲这个变量之前,需要先知道一点,awk只有两种类型的变量:数字和字符串,如果要进行类型转换,可以通过下面的方法:
字符串转数字: string + 0
数字转字符串: number ""
例1:
下面的例子将数字PI转换为字符串输出,并且只输出3位:
qingsong@db2a:~$ awk '
> BEGIN { PI = 3.141592653
> CONVFMT = "%.3g"
> print PI""
> }'
3.14
qingsong@db2a:~$
注意,设置OFMT是没用的,因为它只是控制数字的输出格式,而PI""是由数字转化的字符串,不受其控制:
qingsong@db2a:~$ awk '
> BEGIN { PI = 3.141592653
> OFMT = "%.3g"
> print PI""
> }'
3.14159
qingsong@db2a:~$
3. RLENGTH 和 RSTART
RLENGTH length set by the last call to the built-in function, match().
RSTART index set by the last call to match().
首先需要知道内置函数match(s,r)的作用,s是代表字符串,r代表正则表达式,match的作用是返回匹配r的子串在s中的首个位置
例如,正则表达式 "[+-]?[0-9]+"表示一个整数,那么match("hello+1234","[+-]?[0-9]+")返回值是6,因为从第6位开始是个数字:
qingsong@db2a:~$ awk 'BEGIN { print match("hello+1234","[+-]?[0-9]+") }'
6
RSTART就是match函数的返回值,RLENGTH表示被匹配的子串的长度
例1:下面的例子中,"aaa+"在"baacaaa"中第5个位置开始出现,所以RSTART为5;匹配的子串为"aaa",长度为3,所以RLENGTH为3
qingsong@db2a:~$ awk '
> BEGIN {
> match("baacaaa", "aaa+")
> print RSTART, RLENGTH
> }'
5 3
qingsong@db2a:~$
例2:下面的例子中,使用substr函数打印了匹配的子串,substr第2个参数表示子串开始位置,第3个参数表示子串长度:
qingsong@db2a:~$ awk '
> BEGIN {
> s = "hello-1234x"
> r = "[+-]?[0-9]+"
> match(s, r)
> print substr(s, RSTART,RLENGTH)
> }'
-1234
qingsong@db2a:~$
参考资料:
《The AWK Programming Language》
《Sed and Awk 101 Hacks》
阅读全文
0 0
- awk内置变量之OFMT、CONVFMT、RLENGTH、RSTART
- OFMT 变量
- awk内置变量之SUBSEP
- awk 内置变量
- awk内置变量
- Shell awk 内置变量
- awk内置变量
- linux awk内置变量
- awk 内置变量
- awk 内置变量
- awk内置变量之FILENAME、ARGC、ARGV、ENVIRON
- awk 内置变量的使用
- linux awk 内置变量实例
- linux awk 内置变量实例
- linux awk 内置变量实例
- awk内置变量的应用
- awk内置变量使用介绍
- Linux-awk及内置变量
- (转)金融从业人员的核心竞争力在哪里?
- 17.读书笔记收获不止Oracle之 索引存储列值
- 2017年10月30日 第二十一次总结
- Failed to contact master at [localhost:11311]
- Git小结
- awk内置变量之OFMT、CONVFMT、RLENGTH、RSTART
- 线性基+树链剖分(bzoj4568)
- 序列标注模型和分类器标注模型区别
- 设计模式之观察者模式
- 【机器学习】神经网络及BP推导
- HDU
- PAT乙级题1020.月饼
- poj 1236 Network of Schools 强连通
- 设计模式之装饰者模式