ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

awk变量

2022-07-05 00:36:36  阅读:133  来源: 互联网

标签:tmp 变量 超哥 awk txt root pylinux


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键)换行符

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

image-20191108093711837

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

内置变量ORS

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

ORS变量可以更改输出符

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

image-20191108095028806

内置变量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,那就如图所示

image-20191108100131136

image-20191108102006702

[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讲的好啊

image-20191108103035312

方法二:

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

image-20191108103418158

方法三:间接引用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是真滴好,嘿嘿

标签:tmp,变量,超哥,awk,txt,root,pylinux
来源: https://www.cnblogs.com/xiaohaoge/p/16444931.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有