awk 内置变量与自定义变量
点击上方“生信科技爱好者”,马上关注真爱,请置顶或星标
作者:ghostwu
原文:https://www.cnblogs.com/ghostwu/p/9085653.html
AWK 中,变量分为两种:内置变量与自定义变量。
内置变量
常见的内置变量有:
FS
:输入字段分隔符, 默认为空白字符;OFS
:输出字段分隔符, 默认为空白字符;RS
:输入记录分隔符(输入换行符), 指定输入时的换行符;ORS
:输出记录分隔符(输出换行符),输出时用指定符号代替换行符;NF
:number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量;NR
:行号,当前处理的文本行的行号;FNR
:各文件分别计数的行号;FILENAME
:当前文件名;ARGC
:命令行参数的个数;ARGV
:数组,保存的是命令行所给定的各参数。
1. NF 打印字段数
下面的 NF 打印出每行有多少列。
$ awk '{print NF}' ghostwu.txt 2$ cat ghostwu.txt ghostwuzhangsan 22lisi 23 woman
2. 引用 NF 变量
引用 NF 变量,需要用美元符号。
$ cat ghostwu.txt ghostwu 20 manzhangsan 22 womanlisi 23 woman$ awk '{print $NF}' ghostwu.txt manwomanwoman$ awk '{print $(NF-2), $(NF-1), $(NF)}' ghostwu.txt ghostwu 20 manzhangsan 22 womanlisi 23 woman
3. NR 打印行号
使用 NR 打印每一行的行号:
$ awk '{print NR,$0}' ghostwu.txt 1 ghostwu 20 man2 zhangsan 22 woman3 lisi 23 woman
4. NR 与 FNR
awk 支持多文件扫描,如果采用 NR,下一个文件的行序号会接着上一个文件;如果使用 FNR,就会单独统计。
$ awk '{print NR, $0}' ghostwu.txt ghostwu.bak ghostwu 20 manzhangsan 22 womanlisi 23 womanghostwu 20 manzhangsan 22 womanlisi 23 woman$ awk '{print FNR, $0}' ghostwu.txt ghostwu.bak ghostwu 20 manzhangsan 22 womanlisi 23 womanghostwu 20 manzhangsan 22 womanlisi 23 woman
5. RS 指定行分隔符
RS 指定行输入符,默认为回车换行,如果我们想让它以空格作为行输入符( 即,遇到空格就换行 ),当我们指定使用空格作为"行分隔符"时,在 awk 解析文本时,每当遇到空格,awk 就认为遇到的空格是换行符,于是 awk 就将文本换行了。
$ awk '{print NR, $0}' ghostwu.txt ghostwu 20 manzhangsan 22 womanlisi 23 woman$ awk -v RS=" " '{print NR, $0}' ghostwu.txtghostwu20manzhangsan22womanlisi23woman
6. ORS 指定输出行分隔符
ghostwu@dev:~/linux/awk$ awk -v ORS='---->' '{print $0}' ghostwu.txt
ghostwu 20 man---->zhangsan 22 woman---->lisi 23 woman---->ghostwu@dev:~/linux/awk$
7. 同时指定输入,输出行分隔符
$ awk -v RS=" " -v ORS='->' '{print $0}' ghostwu.txt
ghostwu->20->man
zhangsan->22->woman
lisi->23->woman
8. 使用 FILENAME 打印文件名称
$ awk '{print FILENAME, NR, $0}' ghostwu.txt ghostwu.bak
ghostwu.txt 1 ghostwu 20 man
ghostwu.txt 2 zhangsan 22 woman
ghostwu.txt 3 lisi 23 woman
ghostwu.bak 4 ghostwu 20 man
ghostwu.bak 5 zhangsan 22 woman
ghostwu.bak 6 lisi 23 woman
9. ARGV 保存命令行参数的数组
ARGV 保存命令行参数的数组,'pattern{action}'
并不被看做参数。
$ awk '{print ARGV[0], ARGV[1], ARGV[2]}' ghostwu.txt awk ghostwu.txt awk ghostwu.txt awk ghostwu.txt
10. ARGC 保存命令行参数个数
使用 ARGC 可以保存命令行参数的个数,下例中ARGV[1]
没有值,因为命令行没有给第三个参数。
$ awk '{print ARGV[0], ARGV[1], ARGV[2], ARGC}' ghostwu.txt awk ghostwu.txt 2awk ghostwu.txt 2awk ghostwu.txt 2
自定义变量
awk 常见的用户自己定义的变量,有两种形式:通过 -v 变量名的形式,和在 program 中直接定义。
1. -v varname=value
使用-v varname=value
的形式自定义变量时, 变量名区分字符大小写。
$ awk -v my_name="hello world" 'BEGIN{print my_name}'hello world
2. 在 program 中直接定义变量
在 program 中直接定义变量时,以下定义了3个自定义变量,其实形式像编程语言一样,定义的时候用分号。打印变量跟之前一样,用逗号隔开,注意,不需要用美元符号。
$ awk 'BEGIN{ my_name="zhangsan"; my_age=22; my_sex="男"; print my_name, my_age, my_sex}'zhangsan 22 男
3. 引用命令行定义的变量
除了 1、2 的自定义变量方式外,我们也可以引用命令行定义的变量。
$ echo $myvar
$ myvar="我在命令行定义的变量"$ awk -v var1=$myvar 'BEGIN{print var1}'我在命令行定义的变量
— END—
声明:本公众号所有转载的文章仅用于参考学习使用,文章包括文字与图片在内的著作权属于原作者所有,禁止用于商用。文章任何形式的转载请联系原作者获得授权。
戳原文,更有料!
本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
awk 内置变量与自定义变量相关推荐
- 文件自定义变量_awk 内置变量与自定义变量
点击上方"生信科技爱好者",马上关注真爱,请置顶或星标 作者:ghostwu 原文:https://www.cnblogs.com/ghostwu/p/9085653.html A ...
- linux awk 内置变量使用介绍
awk是个优秀文本处理工具,可以说是一门程序设计语言.下面是awk内置变量. 一.内置变量表 属性 说明 $0 当前记录(作为单个变量) $1~$n 当前记录的第n个字段,字段间由FS分隔 FS 输入 ...
- linux内置变量大全,(转)linux awk 内置变量使用介绍
awk是个优秀文本处理工具,可以说是一门程序设计语言.下面是awk内置变量. 一.内置变量表 属性 说明 $0 当前记录(作为单个变量) $1~$n 当前记录的第n个字段,字段间由FS分隔 FS 输入 ...
- awk内置变量之OFMT、CONVFMT、RLENGTH、RSTART
本篇文章主要简述以下awk内置变量: OFMT format for printing numbers; initially = "%.6g". CONVFMT format fo ...
- linux awk 内置变量实例
awk 是一门非常优秀的文本处理工具,甚至可以上升作为一门程序设计语言. 它处理文本的速度是快得惊人的,现在很多基于shell 日志分析工具都可以用它完成.特点是设计简单,速度表现很好,本文将介绍aw ...
- python不允许使用关键字作为变量名、允许使用内置函数_【判断题】Python不允许使用关键字作为变量名,但是允许使用内置函数名作为变量名,不过这会改变函数名的含义,所以不建议这样做...
[判断题]Python不允许使用关键字作为变量名,但是允许使用内置函数名作为变量名,不过这会改变函数名的含义,所以不建议这样做 更多相关问题 [单选,A2型题,A1/A2型题] <十四经发挥&g ...
- python不允许使用关键字作为变量名、允许使用内置函数_Python不允许使用关键字作为变量名,允许使用内置函数名作为变量名,但这会改变函数名的含义。...
Python不允许使用关键字作为变量名,允许使用内置函数名作为变量名,但这会改变函数名的含义. 答:对 对于检查出的无效MAC帧,以太网负责重传. 答:× 哪一年开始中国成为世界第二大经济体? 答:2 ...
- awk内置字符串函数详解
awk提供了许多强大的字符串函数,见下表: awk内置字符串函数 gsub(r,s) 在整个$0中用s替代r gsub(r,s,t) 在整个t中用s替代r index(s,t) 返回s中字符串t的第一 ...
- 内置函数、自定义函数
编程语言的函数都可以分为两类:内置函数和自定义函数. 内置函数分为 数字相关的内置函数 # abs(x) 求绝对值print(abs(-10)) #10 """ divm ...
最新文章
- 没有执行力,谈什么目标理想?
- 为什么大家都不戳破深度学习的本质?!
- 练习5.1更新——四则运算 测试与封装
- day1-Python擅长的领域+学习内容
- 关于oracle中table函数的使用
- ADO.NET 【属性扩展】性别、年龄、编号
- E - Rotate and Flip(转化一般性)
- 共轭方式怎么判断_怎样判断共轭双烯
- 20165236 2017-2018-2 《Java程序设计》结对编程练习_四则运算
- android 字体px转sp,Android中px,dp,sp区别及换算
- 软件工程领域2021年上半年的CCF-A和B类会议列表
- 如鹏网.Net高级技术9.XML文件操作
- 线段树合并学习笔记(P4556)
- 圆梦腾讯之后,我收集整理了这份“2022Java 常见面试真题汇总
- python日历图_Python干货宝典!玩转内置模块:日历模块
- windows截图快捷键_使用快捷键打开并使用Windows截图工具
- mas机 mysql_移动MAS机开发相关
- Kubectl(完整)基本操作命令
- 负载均衡之跑马竞赛算法
- linux 批量指定文件夹压缩,排除某个不压缩,查看文件大小,查看磁盘空间