awk变量

awk参数

参数 解释
-F 指定分割字段符
-v 定义或修改一个awk内部的变量
-f 从脚本文件中读取awk命令

对于awk而言,变量分为

  • 内置变量
  • 自定义变量
内置变量 解释
FS 输入字段分隔符, 默认为空白字符
OFS 输出字段分隔符, 默认为空白字符
RS 输入记录分隔符(输入换行符), 指定输入时的换行符
ORS 输出记录分隔符(输出换行符),输出时用指定符号代替换行符
NF NF:number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量
NR NR:行号,当前处理的文本行的行号。
FNR FNR:各文件分别计数的行号
FILENAME FILENAME:当前文件名
ARGC ARGC:命令行参数的个数
ARGV ARGV:数组,保存的是命令行所给定的各参数

内置变量

NR,NF、FNR

  • awk的内置变量NR、NF是不用添加$符号的
  • $0 $1 $2 $3 ... 是需要添加$符号的

输出每行行号,以及字段总个数

[root@pylinux tmp]# cat -n alex.txt
1 alex1 alex2 alex3 alex4 alex5
2 alex6 alex7 alex8 alex9 alex10
3 alex11 alex12 alex13 alex14 alex15
4 alex16 alex17 alex18 alex19 alex20
5 alex21 alex22 alex23 alex24 alex25
6 alex26 alex27 alex28 alex29 alex30
7 alex31 alex32 alex33 alex34 alex35
8 alex36 alex37 alex38 alex39 alex40
9 alex41 alex42 alex43 alex44 alex45
10 alex46 alex47 alex48 alex49 alex50 alex51
[root@pylinux tmp]#
[root@pylinux tmp]# awk '{print NR,NF}' alex.txt
1 5
2 5
3 5
4 5
5 5
6 5
7 5
8 5
9 5
10 6

输出每行行号,以及指定的列

[root@pylinux tmp]# awk '{print NR,$1,$5}' alex.txt
1 alex1 alex5
2 alex6 alex10
3 alex11 alex15
4 alex16 alex20
5 alex21 alex25
6 alex26 alex30
7 alex31 alex35
8 alex36 alex40
9 alex41 alex45
10 alex46 alex50

处理多个文件显示行号

#  普通的NR变量,会将多个文件按照顺序排序
[root@pylinux tmp]# awk '{print NR,$0}' alex.txt pwd.txt
#使用FNR变量,可以分别对文件行数计数
[root@pylinux tmp]# awk '{print FNR,$0}' alex.txt pwd.txt
### 内置变量RS

RS变量作用是输入分隔符,默认是回车符,也就是回车(Enter键)换行符

我们也可以自定义空格作为行分隔符,每遇见一个空格,就换行处理

[root@pylinux tmp]# awk -v RS=' ' '{print NR,$0}' chaoge.txt

内置变量ORS

ORS是输出分隔符的意思,awk默认认为,每一行结束了,就得添加回车换行符

ORS变量可以更改输出符

awk -v ORS='@@@' '{print NR,$0}' chaoge.txt

内置变量FILENAME

显示awk正在处理文件的名字

[root@pylinux tmp]# awk '{print FILENAME,FNR,$0}' chaoge.txt   alex.txt
chaoge.txt 1 超哥a 超哥b
chaoge.txt 2 超哥c 超哥d 超哥e
chaoge.txt 3 超哥f 超哥g 超哥h
chaoge.txt 4 超哥i 超哥j 超哥k
chaoge.txt 5 超哥l 超哥m 超哥n
chaoge.txt 6 超哥o 超哥p 超哥q
chaoge.txt 7 超哥r 超哥s 超哥t
chaoge.txt 8 超哥u 超哥v 超哥w
chaoge.txt 9 超哥x 超哥y 超哥z
alex.txt 1 alex1 alex2 alex3 alex4 alex5
alex.txt 2 alex6 alex7 alex8 alex9 alex10
alex.txt 3 alex11 alex12 alex13 alex14 alex15
alex.txt 4 alex16 alex17 alex18 alex19 alex20

变量ARGC、ARGV

ARGV表示的是一个数组,数组中保存的是命令行所给的参数

数组是一种数据类型,如同一个盒子

盒子有它的名字,且内部有N个小格子,标号从0开始

给一个盒子起名字叫做months,月份是1~12,那就如图所示

[root@pylinux tmp]# awk 'BEGIN{print "超哥教你学内置awk变量呢"}'  chaoge.txt
超哥教你学内置awk变量呢
[root@pylinux tmp]#
[root@pylinux tmp]#
[root@pylinux tmp]#
[root@pylinux tmp]#
[root@pylinux tmp]# awk 'BEGIN{print "超哥教你学内置awk变量呢",ARGV[0]}' chaoge.txt
超哥教你学内置awk变量呢 awk
[root@pylinux tmp]#
[root@pylinux tmp]#
[root@pylinux tmp]# awk 'BEGIN{print "超哥教你学内置awk变量呢",ARGV[0],ARGV[1]}' chaoge.txt
超哥教你学内置awk变量呢 awk chaoge.txt
[root@pylinux tmp]#
[root@pylinux tmp]#
[root@pylinux tmp]#
[root@pylinux tmp]# awk 'BEGIN{print "超哥教你学内置awk变量呢",ARGV[0],ARGV[1],ARGV[2]}' chaoge.txt alex.txt
超哥教你学内置awk变量呢 awk chaoge.txt alex.txt

自定义变量

顾名思义,是我们自己定义变量

  • 方法一,-v varName=value
  • 方法二,在程序中直接定义

方法一:

[root@pylinux tmp]# awk -v luffyVarName="超哥nb,awk讲的好啊"  'BEGIN{print luffyVarName}' chaoge.txt
超哥nb,awk讲的好啊

方法二:

[root@pylinux tmp]# awk 'BEGIN{chaogeVar="超哥带你学linux,还怕学不会咋的";chaogeVar2="学的会,必须学得会" ;print chaogeVar,chaogeVar2}'
超哥带你学linux,还怕学不会咋的 学的会,必须学得会

方法三:间接引用shell变量

[root@pylinux tmp]# studyLinux="超哥讲的linux是真滴好,嘿嘿"
[root@pylinux tmp]#
[root@pylinux tmp]#
[root@pylinux tmp]# awk -v myVar=$studyLinux 'BEGIN{print myVar}' # -v是给awk定义变量
超哥讲的linux是真滴好,嘿嘿

最新文章

  1. x86开启 HUGEPAGES
  2. iOS 更改webView文字颜色丶文字大小丶背景色的方法
  3. 方差分析 ANOVA
  4. ASCII 非打印字符
  5. PHP Warning: Module 'modulename' already loaded in Unknown on line 0
  6. 夺命雷公狗ThinkPHP项目之----企业网站16之文章列表页的完善(关联查询)
  7. Printing Array elements with Comma delimiters
  8. 【开源项目5】测滑菜单MenuDrawer的使用以及解析
  9. JVM原理
  10. 统计指定时间段的访问真正WEB页面(去除静态请求)的IP的TOP100排行
  11. Autoconf/Automake工具简介
  12. 常见的XSS攻击代码
  13. layui 表格内容显示更改
  14. 【puppeteer】前端自动化初探(一)
  15. [NewLife.XCode]数据层缓存(网站性能翻10倍)
  16. x86指令格式
  17. ubuntu 配置ftp server(zz)
  18. 工作总结(一):Linux C
  19. 铁乐学python_day18-19_面向对象编程1
  20. Git错误提示之:fatal: Not a git repository (or any of the parent directories): .git

热门文章

  1. 前端 | HTML5基础知识
  2. Servlet特性研究之异步模式
  3. KingbaseES中的参数查看与修改
  4. KingbaseES 数据库Windows环境下注册失败分析
  5. typora收费了,最后一个免费版提供下载
  6. Rust变量用法与特征
  7. 重新安装kuboard后,原先配置的CI/CD命令都没了,需要重新创建
  8. Traefik SRE 之使用 Prometheus 进行监控报警
  9. CentOS7下的lvm(逻辑卷)在线扩容
  10. Elastic:使用ElastAlert发送邮件通知