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
ghostwu
zhangsan 22
lisi 23 woman
2. 引用 NF 变量
引用 NF 变量,需要用美元符号。
$ cat ghostwu.txt
ghostwu 20 man
zhangsan 22 woman
lisi 23 woman
$ awk '{print $NF}' ghostwu.txt
man
woman
woman
$ awk '{print $(NF-2), $(NF-1), $(NF)}' ghostwu.txt
ghostwu 20 man
zhangsan 22 woman
lisi 23 woman
3. NR 打印行号
使用 NR 打印每一行的行号:
$ awk '{print NR,$0}' ghostwu.txt
1 ghostwu 20 man
2 zhangsan 22 woman
3 lisi 23 woman
4. NR 与 FNR
awk 支持多文件扫描,如果采用 NR,下一个文件的行序号会接着上一个文件;如果使用 FNR,就会单独统计。
$ awk '{print NR, $0}' ghostwu.txt ghostwu.bak
ghostwu 20 man
zhangsan 22 woman
lisi 23 woman
ghostwu 20 man
zhangsan 22 woman
lisi 23 woman
$ awk '{print FNR, $0}' ghostwu.txt ghostwu.bak
ghostwu 20 man
zhangsan 22 woman
lisi 23 woman
ghostwu 20 man
zhangsan 22 woman
lisi 23 woman
5. RS 指定行分隔符
RS 指定行输入符,默认为回车换行,如果我们想让它以空格作为行输入符( 即,遇到空格就换行 ),当我们指定使用空格作为"行分隔符"时,在 awk 解析文本时,每当遇到空格,awk 就认为遇到的空格是换行符,于是 awk 就将文本换行了。
$ awk '{print NR, $0}' ghostwu.txt
ghostwu 20 man
zhangsan 22 woman
lisi 23 woman
$ awk -v RS=" " '{print NR, $0}' ghostwu.txt
ghostwu
20
man
zhangsan
22
woman
lisi
23
woman
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 2
awk ghostwu.txt 2
awk 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内置函数、外部变量
外部变量 ①获取外部变量 格式: awk '{action}' 变量名=变量值 ,这样传入变量可以在action中获得值. 示例: test='awk test'--day-5 外部变量 ①获取外部变 ...
- Linux常用基本命令:三剑客命令之-awk内置变量与自定义变量
AWK中,变量分为两种:内置变量与自定义变量. 常见的内置变量有: FS:输入字段分隔符, 默认为空白字符 OFS:输出字段分隔符, 默认为空白字符 RS:输入记录分隔符(输入换行符), 指定输入时的 ...
- 【转】awk内置变量
awk是个优秀文本处理工具,可以说是一门程序设计语言.下面是awk内置变量. 一.内置变量表 属性 说明 $0 当前记录(作为单个变量) $1~$n 当前记录的第n个字段,字段间由FS分隔 FS 输入 ...
- Linux基础教程 linux awk内置变量使用介绍
awk是个优秀文本处理工具,可以说是一门程序设计语言.下面是兄弟连Linux培训 给大家介绍的awk内置变量. 一.内置变量表 属性 说明 $0 当前记录(作为单个变量) $1~$n 当前记录的第n个 ...
- awk 内置变量
awk 内置变量 FS 设置输入域分隔符,等价于命令行 -F选项 OFS 输出域分隔符 NF 浏览记录的域的个数NR 已读的记录数RS 控制记录分隔符 ORS 输出记录分隔符 substr 截取指定的 ...
- 『忘了再学』Shell基础 — 29、AWK内置变量
目录 1.AWK内置变量 2.练习说明 (1)$n变量练习 (2)FS变量练习 (3)NF变量和NR变量练习 3.总结: 1.AWK内置变量 AWK内置变量如下表: awk内置变量 作用 $0 代表目 ...
- Thymeleaf 之 内置对象、定义变量、URL参数及标签自定义属性
Thymeleaf 之 内置对象.定义变量.URL参数及标签自定义属性 本文章来自[知识林] 如标题所述,这篇文章主要讲述Thymeleaf中的内置对象(list解析.日期格式化.数字格式化等).定义 ...
- linux awk 内置函数详细介绍(实例)
这节详细介绍awk内置函数,主要分以下3种类似:算数函数.字符串函数.其它一般函数.时间函数 一.算术函数: 以下算术函数执行与 C 语言中名称相同的子例程相同的操作: 函数名 说明 atan2( y ...
- linux awk 内置函数实例
awk内置函数,主要分4种:算数函数.字符串函数.时间函数.一般函数 一.算术函数 以下算术函数执行与 C 语言中名称相同的子例程相同的操作: 函数名 说明 atan2( y, x ) 返回 y/x ...
- linux awk 内置函数详细介绍(实例)
这节详细介绍awk内置函数,主要分以下3种类似:算数函数.字符串函数.其它一般函数.时间函数 一.算术函数: 以下算术函数执行与 C 语言中名称相同的子例程相同的操作: 函数名 说明 atan2( y ...
随机推荐
- Solon2 接口开发: 强化 Gateway 模式
一般可以从这几方面对 Gateway 模式进行强化: 定制异常状态码 定制基类 将一些处理独立封装成类 接口只返回数据部份,异常状态用抛 强化之后,具体的网关即简单,又功能强大.同时会对团队开发形成一 ...
- DFS总结
常见剪枝方法 优化搜索顺序 优先搜索决策树较小的点,例如在165. 小猫爬山一题中,优先搜索体重较大的扩展出的情况较少 排除冗余信息 如果某些情况在此前已经被搜索过了,那么无需继续搜索 可行性剪枝 如 ...
- 在Mac搭建一个便捷的Markdown创作环境
前言 使用 Typora + PicGo + Gitee + Snipaste 在 Mac 搭建一个 Markdown 编辑环境. Typora 是一款简洁的 Markdown 编辑器: PicGo ...
- Java------常用类(二)
import org.junit.Test; import java.io.UnsupportedEncodingException; import java.util.Arrays; /** * 涉 ...
- vue之列表渲染v-for
目录 简介 用法 v-for可循环的几种变量的展示 数组的循环展示 对象的循环展示 字符串的循环展示 数字的循环展示 v-for搭档key值的说明 js循环几种方式 基于索引的循环 数组的循环 数组基 ...
- 在Kubernetes(k8s)中使用GPU
介绍 Kubernetes 支持对节点上的 AMD 和 NVIDIA GPU (图形处理单元)进行管理,目前处于实验状态. 修改docker配置文件 root@hello:~# cat /etc/do ...
- ChatGPT 与 Midjourney 强强联手,让先秦阿房宫重现辉煌!
Midjourney 是一款非常特殊的 AI 绘画聊天机器人,它并不是软件,也不用安装,而是直接搭载在 Discord 平台之上,所有的功能都是通过调用 Discord 的聊天机器人程序实现的.要想使 ...
- javasec(八)jndi注入
JNDI JNDI(全称Java Naming and Directory Interface)是用于目录服务的Java API,它允许Java客户端通过名称发现和查找数据和资源(以Java对象的形式 ...
- [MAUI]模仿网易云音乐黑胶唱片的交互实现
@ 目录 创建页面布局 创建手势控件 创建影子控件 唱盘拨动交互 唱盘和唱针动画 项目地址 用过网易云音乐App的同学应该都比较熟悉它播放界面. 这是一个良好的交互设计,留声机的界面隐喻准确地向人们传 ...
- 玩一玩 Ubuntu 下的 VSCode 编程
一:背景 1. 讲故事 今天是五一的最后一天,想着长期都在 Windows 平台上做开发,准备今天换到 Ubuntu 系统上体验下,主要是想学习下 AT&T 风格的汇编,这里 Visual S ...