本篇文章主要简述以下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相关推荐

  1. linux awk 内置变量使用介绍

    awk是个优秀文本处理工具,可以说是一门程序设计语言.下面是awk内置变量. 一.内置变量表 属性 说明 $0 当前记录(作为单个变量) $1~$n 当前记录的第n个字段,字段间由FS分隔 FS 输入 ...

  2. linux内置变量大全,(转)linux awk 内置变量使用介绍

    awk是个优秀文本处理工具,可以说是一门程序设计语言.下面是awk内置变量. 一.内置变量表 属性 说明 $0 当前记录(作为单个变量) $1~$n 当前记录的第n个字段,字段间由FS分隔 FS 输入 ...

  3. linux awk 内置变量实例

    awk 是一门非常优秀的文本处理工具,甚至可以上升作为一门程序设计语言. 它处理文本的速度是快得惊人的,现在很多基于shell 日志分析工具都可以用它完成.特点是设计简单,速度表现很好,本文将介绍aw ...

  4. awk 内置变量与自定义变量

    点击上方"生信科技爱好者",马上关注真爱,请置顶或星标 作者:ghostwu 原文:https://www.cnblogs.com/ghostwu/p/9085653.html A ...

  5. 命令 —— awk内置变量(NF,NR,FS,FILENAME)

    关于awk命令的几个内置变量(NF,NR,FS,FILENAME) 1.NF:支持记录域个数,在记录被读之后再设置例1 [root@redhat wilsontest]# pwd /tmp/wilso ...

  6. awk从入门到入土(23)awk内置变量ARGC、ARGC--命令行参数传递

    awk可以通过-v var=value的形式向awk脚本传递变量,除了这种方式之外,还可以直接在awk命令行上直接传递,如: $ echo a | gawk 'BEGIN{ for(i = 0 ; i ...

  7. awk取文本列_awk命令结构/内置变量/获取文本某行或某列

    awk脚本基本结构 awk 'BEGIN{ print "start" }pattern{ commands }END{ print "end" }' file ...

  8. Linux-awk及内置变量

    概述 awk(分析&处理) awk是一个数据处理工具,相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分成数个"字段"来处理. 通常运行模式: awk ' 条件 ...

  9. awk NR详解!awk 的内置变量 NF、NR、FNR、FS、OFS、RS、ORS

    NF 字段个数,(读取的列数) NR 记录数(行号),从1开始,新的文件延续上面的计数,新文件不从1开始 FNR 读取文件的记录数(行号),从1开始,新的文件重新从1开始计数 FS 输入字段分隔符,默 ...

最新文章

  1. 四层和七层交换技术-loadbalance
  2. 特斯拉炫技现场:电驴、行人、快递车,中国的小路难不倒Autopilot自动驾驶
  3. 一个项目从开工到交付使用需要经历的过程
  4. 洛谷P2671 求和 [数论]
  5. RuoYi(分离版) 使用代码生成器添加子模块(idea版)
  6. Window捕获消息机制-C#
  7. P5496-[模板]回文自动机【PAM】
  8. 设计模式记--Observer Pattern观察者模式
  9. oracle根据多个条件分别修改符合条件的记录
  10. (12)FPGA面试技能提升篇(IUS、PT、Leda)
  11. zz 跟风小结一下孕期~
  12. centos7部署posgresql和kong总结
  13. 自动化测试 短信验证登录
  14. 停止MySQL正在执行的SQL语句
  15. 了解HTML CSS选择器操作和特性
  16. 学习笔记day1-计算机介绍
  17. 2021-08-31
  18. 什么是类?什么是对象?类与对象之间是什么关系?类的特性有哪些?
  19. 3D摇杆控制器一种简单实现!Cocos Creator 3D!
  20. mysql8.013安装_关于mysql 8.0.13zip包安装

热门文章

  1. c语言 交换两个变量 指针,C语言程序设计第5章“使用指针参数交换两个变量值”案例...
  2. C语言实例——四种排序算法(冒泡排序、选择排序、插入排序、快速排序)
  3. docker使用小记——docker安装es+ik分词器+拼音分词器+kibana
  4. 模拟IIC的时钟延展问题(Clock Stretching)
  5. ubuntu20.04 docker安装、配置
  6. 身体湿气重怎么办?游养乐分享2个祛湿小法宝
  7. python爬虫脚本入门-通过电影脚本讲些爬虫知识
  8. 用数组打印平行四边形
  9. org.apache.jasper.JasperException异常解决
  10. Python语言在地球科学交叉领域中的应用