本篇文章主要简述以下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. 天天都会写接口(interface),但它的用途和好处有多少人能说得清楚?
  2. Docker(二):Dockerfile 使用介绍
  3. calendar 获取季度的第一天_Java日期查询:日、周、旬、月、季度、年等时间操作...
  4. 基于nginx和uWSGI在Ubuntu系统上部署Django项目
  5. 服务器集群技术(备份服务器方案和均摊工作方案)(用来解决服务器挂掉问题)...
  6. 平面最接近点对问题(分治)
  7. Android4.0蓝牙使能的详细解析
  8. 如何在eclipse里使用git
  9. Flash网络游戏简单的源代码
  10. 【硬刚大数据之面试篇】2021年从零到大数据专家面试篇之ClickHouse篇
  11. 使用Bus Hound抓USB转串口数据包,助力问题分析
  12. Transaction使用及原理
  13. 苹果说全是假的,市面不存在原装贴膜
  14. 程序员必备开发工具(IDE)推荐
  15. 人一生要看的60本书
  16. 微信企业号开发:企业支付基础
  17. Bos物流项目之在线下单流程图
  18. Android直播中弹幕效果实现
  19. 一种三分频电路的实现与仿真
  20. 文件包含漏洞——实例

热门文章

  1. 核范数和l1范数_向量和矩阵的各种范数比较(1范数、2范数、无穷范数等等
  2. C语言—字符串函数的使用
  3. 2022新版分销商城自带30种营销模块
  4. “Microsoft Office Word已停止工作”的终极解决方案 (转)
  5. exit(0)与exit(1)return的区别
  6. 百度智能云实现文字转语音
  7. ARC060 C - Tak and Cards(dp,背包)
  8. php elo算法_全面解读PHP的人气开发框架Laravel
  9. 中科院考研经历③--阶段总结及暑假计划
  10. 什么是消融实验(Ablation experiment)?