点击上方“生信科技爱好者”,马上关注真爱,请置顶或星标

作者: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 内置变量与自定义变量相关推荐

  1. 文件自定义变量_awk 内置变量与自定义变量

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

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

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

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

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

  4. awk内置变量之OFMT、CONVFMT、RLENGTH、RSTART

    本篇文章主要简述以下awk内置变量: OFMT format for printing numbers; initially = "%.6g". CONVFMT format fo ...

  5. linux awk 内置变量实例

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

  6. python不允许使用关键字作为变量名、允许使用内置函数_【判断题】Python不允许使用关键字作为变量名,但是允许使用内置函数名作为变量名,不过这会改变函数名的含义,所以不建议这样做...

    [判断题]Python不允许使用关键字作为变量名,但是允许使用内置函数名作为变量名,不过这会改变函数名的含义,所以不建议这样做 更多相关问题 [单选,A2型题,A1/A2型题] <十四经发挥&g ...

  7. python不允许使用关键字作为变量名、允许使用内置函数_Python不允许使用关键字作为变量名,允许使用内置函数名作为变量名,但这会改变函数名的含义。...

    Python不允许使用关键字作为变量名,允许使用内置函数名作为变量名,但这会改变函数名的含义. 答:对 对于检查出的无效MAC帧,以太网负责重传. 答:× 哪一年开始中国成为世界第二大经济体? 答:2 ...

  8. awk内置字符串函数详解

    awk提供了许多强大的字符串函数,见下表: awk内置字符串函数 gsub(r,s) 在整个$0中用s替代r gsub(r,s,t) 在整个t中用s替代r index(s,t) 返回s中字符串t的第一 ...

  9. 内置函数、自定义函数

    编程语言的函数都可以分为两类:内置函数和自定义函数. 内置函数分为 数字相关的内置函数 # abs(x) 求绝对值print(abs(-10)) #10 """ divm ...

最新文章

  1. 没有执行力,谈什么目标理想?
  2. 为什么大家都不戳破深度学习的本质?!
  3. 练习5.1更新——四则运算 测试与封装
  4. day1-Python擅长的领域+学习内容
  5. 关于oracle中table函数的使用
  6. ADO.NET 【属性扩展】性别、年龄、编号
  7. E - Rotate and Flip(转化一般性)
  8. 共轭方式怎么判断_怎样判断共轭双烯
  9. 20165236 2017-2018-2 《Java程序设计》结对编程练习_四则运算
  10. android 字体px转sp,Android中px,dp,sp区别及换算
  11. 软件工程领域2021年上半年的CCF-A和B类会议列表
  12. 如鹏网.Net高级技术9.XML文件操作
  13. 线段树合并学习笔记(P4556)
  14. 圆梦腾讯之后,我收集整理了这份“2022Java 常见面试真题汇总
  15. python日历图_Python干货宝典!玩转内置模块:日历模块
  16. windows截图快捷键_使用快捷键打开并使用Windows截图工具
  17. mas机 mysql_移动MAS机开发相关
  18. Kubectl(完整)基本操作命令
  19. 负载均衡之跑马竞赛算法
  20. linux 批量指定文件夹压缩,排除某个不压缩,查看文件大小,查看磁盘空间

热门文章

  1. 大厂程序员回乡真风光?敲锣打鼓游街欢迎,横幅写着月薪和公司!
  2. 你最讨厌的同事来自哪家公司?这家公司被上千个程序员怒怼!
  3. kafka:一文读懂消费者背后的那点猫腻
  4. 敏捷的四个仪式你了解吗?
  5. 从搞笑到高效,构建敏捷团队的基础原则
  6. 机器人领域牛人和研究组列表
  7. js空对象undefined
  8. c# 使用dotnetbar 控件绘制曲线图形
  9. html页面校园美景相框,纯CSS+HTML打造图片相框背景
  10. oracle本地连接地址,关于Oracle本地连接出现与监听有关的问题的解决方法探讨,oracle本地连接...