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

作者: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—

声明:本公众号所有转载的文章仅用于参考学习使用,文章包括文字与图片在内的著作权属于原作者所有,禁止用于商用。文章任何形式的转载请联系原作者获得授权。

戳原文,更有料!

文件自定义变量_awk 内置变量与自定义变量相关推荐

  1. nginx proxy_pass 使用变量报错_nginx自定义变量与内置预定义变量

    nginx可以使用变量简化配置与提高配置的灵活性,所有的变量值都可以通过这种方式引用: $变量名 而nginx中的变量分为两种,自定义变量与内置预定义变量 内置变量 声明 可以在sever,http, ...

  2. 如何查看python有哪些内置函数_如何查看 Python 全部内置变量和内置函数?

    查看python内置函数的方法:1.打开Python IDLE编辑器:2.输入" dir(__builtins__)"命令,按下回车键(Enter)得到Python全部内置变量和函 ...

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

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

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

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

  5. python 内置函数 builtins_如何查看 Python 全部内置变量和内置函数?

    查看python内置函数的方法:1.打开Python IDLE编辑器:2.输入" dir(__builtins__)"命令,按下回车键(Enter)得到Python全部内置变量和函 ...

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

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

  7. 【 js基础 Day4】面向过程,面向对象,自定义对象,内置对象

    01 复习 函数:把一些重复的代码封装在一个地方,在需要的时候直接调用这个地方的代码就可以了 函数作用:代码重用 函数的参数: 1.形参:函数定义的时候,函数名字后面的小括号里的变量 2.实参:函数调 ...

  8. JavaScript 的自定义对象 、内置对象、 浏览器对象(window对象以及子对象)、Dom对象

    JS 中的 Object从本质上看,Object 是一个构造函数,用于创建对象. console.dir(Object); //ƒ Object() var obj = new Object(1); ...

  9. java 多重注解_Java注解-元数据、注解分类、内置注解和自定义注解

    大家好,我是乐字节的小乐,上次说过了Java多态的6大特性|乐字节,接下来我们来看看Java编程里的注解. Java注解有以下几个知识点:元数据 注解的分类 内置注解 自定义注解 注解处理器 Serv ...

最新文章

  1. 见到了“公司”定义一个Company类,那么见到了“字段”是不是也可定义一个Column类?...
  2. kafka集群broker频繁挂掉问题解决方案
  3. 【知识必备】浅淡MVP在Android项目中的实战演习,让代码结构更简单~
  4. 修改RAC VIP IP
  5. Linux下MPlayer的安装
  6. 计算2的幂(信息学奥赛一本通-T1037)
  7. 剑破冰山—Oracle开发艺术 内容简介
  8. mac 二进制安装mysql_在mac下安装mysql二进制分发版的方法(不是dmg的)
  9. 删除下拉框只找23火星软件_下拉推广选择23火星软件
  10. pandas —— pd.read_csv 与df.to_csv
  11. SVN问号图标清除方法
  12. python不好找工作怎么办信用卡_利用python进行信用卡欺诈检测
  13. 《增长黑客》:针对产品增长---思维导图
  14. 国庆节,企查查我来啦~
  15. QQ “安全检查未通过,禁止下载该文件” 解决方法
  16. 【Opencv小项目 1】Opencv实现简单颜色识别
  17. Agv、Rgv 车辆控制调度系统开发知识点篇
  18. Mac下安装与使用Medis
  19. ubuntu 开机黑屏解决办法
  20. 解决单行文本省略号显示问题

热门文章

  1. javaSE各阶段练习题--初识Java章节
  2. Java程序设计----Java编程基础
  3. 哈夫曼编解码(C语言)
  4. leetcode 225. 用队列实现栈(维护两个队列用于倒替元素,使用和1进行按位与,实现队列切换)
  5. 【Spring】Spring第二天 - AOP 详解、动态代理设计模式(JDK和cglib)
  6. nodejs中使用worker_threads来创建新的线程
  7. 响应式编程简介之:Reactor
  8. nodejs 定时 mysql_nodejs 使用 mysql
  9. 判断对象存活方法及回收方法
  10. 使类和成员的可访问性最小化