awk内置变量之OFMT、CONVFMT、RLENGTH、RSTART
本篇文章主要简述以下awk内置变量:
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》
awk内置变量之OFMT、CONVFMT、RLENGTH、RSTART相关推荐
- linux awk 内置变量使用介绍
awk是个优秀文本处理工具,可以说是一门程序设计语言.下面是awk内置变量. 一.内置变量表 属性 说明 $0 当前记录(作为单个变量) $1~$n 当前记录的第n个字段,字段间由FS分隔 FS 输入 ...
- linux内置变量大全,(转)linux awk 内置变量使用介绍
awk是个优秀文本处理工具,可以说是一门程序设计语言.下面是awk内置变量. 一.内置变量表 属性 说明 $0 当前记录(作为单个变量) $1~$n 当前记录的第n个字段,字段间由FS分隔 FS 输入 ...
- linux awk 内置变量实例
awk 是一门非常优秀的文本处理工具,甚至可以上升作为一门程序设计语言. 它处理文本的速度是快得惊人的,现在很多基于shell 日志分析工具都可以用它完成.特点是设计简单,速度表现很好,本文将介绍aw ...
- awk 内置变量与自定义变量
点击上方"生信科技爱好者",马上关注真爱,请置顶或星标 作者:ghostwu 原文:https://www.cnblogs.com/ghostwu/p/9085653.html A ...
- 命令 —— awk内置变量(NF,NR,FS,FILENAME)
关于awk命令的几个内置变量(NF,NR,FS,FILENAME) 1.NF:支持记录域个数,在记录被读之后再设置例1 [root@redhat wilsontest]# pwd /tmp/wilso ...
- awk从入门到入土(23)awk内置变量ARGC、ARGC--命令行参数传递
awk可以通过-v var=value的形式向awk脚本传递变量,除了这种方式之外,还可以直接在awk命令行上直接传递,如: $ echo a | gawk 'BEGIN{ for(i = 0 ; i ...
- awk取文本列_awk命令结构/内置变量/获取文本某行或某列
awk脚本基本结构 awk 'BEGIN{ print "start" }pattern{ commands }END{ print "end" }' file ...
- Linux-awk及内置变量
概述 awk(分析&处理) awk是一个数据处理工具,相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分成数个"字段"来处理. 通常运行模式: awk ' 条件 ...
- awk NR详解!awk 的内置变量 NF、NR、FNR、FS、OFS、RS、ORS
NF 字段个数,(读取的列数) NR 记录数(行号),从1开始,新的文件延续上面的计数,新文件不从1开始 FNR 读取文件的记录数(行号),从1开始,新的文件重新从1开始计数 FS 输入字段分隔符,默 ...
最新文章
- 四层和七层交换技术-loadbalance
- 特斯拉炫技现场:电驴、行人、快递车,中国的小路难不倒Autopilot自动驾驶
- 一个项目从开工到交付使用需要经历的过程
- 洛谷P2671 求和 [数论]
- RuoYi(分离版) 使用代码生成器添加子模块(idea版)
- Window捕获消息机制-C#
- P5496-[模板]回文自动机【PAM】
- 设计模式记--Observer Pattern观察者模式
- oracle根据多个条件分别修改符合条件的记录
- (12)FPGA面试技能提升篇(IUS、PT、Leda)
- zz 跟风小结一下孕期~
- centos7部署posgresql和kong总结
- 自动化测试 短信验证登录
- 停止MySQL正在执行的SQL语句
- 了解HTML CSS选择器操作和特性
- 学习笔记day1-计算机介绍
- 2021-08-31
- 什么是类?什么是对象?类与对象之间是什么关系?类的特性有哪些?
- 3D摇杆控制器一种简单实现!Cocos Creator 3D!
- mysql8.013安装_关于mysql 8.0.13zip包安装
热门文章
- c语言 交换两个变量 指针,C语言程序设计第5章“使用指针参数交换两个变量值”案例...
- C语言实例——四种排序算法(冒泡排序、选择排序、插入排序、快速排序)
- docker使用小记——docker安装es+ik分词器+拼音分词器+kibana
- 模拟IIC的时钟延展问题(Clock Stretching)
- ubuntu20.04 docker安装、配置
- 身体湿气重怎么办?游养乐分享2个祛湿小法宝
- python爬虫脚本入门-通过电影脚本讲些爬虫知识
- 用数组打印平行四边形
- org.apache.jasper.JasperException异常解决
- Python语言在地球科学交叉领域中的应用