输出passwd文件中每一行的行号
[root@shell ~]# awk '{print NR,$0}' passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@shell ~]#
分别显示每个文件的行号
#使用NR打印行号
[root@shell ~]# awk '{print NR,$0}' passwd sfz.txt
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 adm:x:3:4:adm:/var/adm:/sbin/nologin
4 wbh 123455466542341653
5 qh 12345235464234112X
6 xxf a23455123142342342
[root@shell ~]#
#使用FNR显示行号
[root@shell ~]# awk '{print FNR,$0}' passwd sfz.txt
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 adm:x:3:4:adm:/var/adm:/sbin/nologin
1 wbh 123455466542341653
2 qh 12345235464234112X
3 xxf a23455123142342342
[root@shell ~]#
RS是输入行分隔符,如果不指定,默认的"行分隔符"就是我们所理解的"回车换行"。
[root@shell ~]# awk '{print NR,$0}' test1.txt
1 abc aaa eee sss
2 fea iaa att 9kk ssf
[root@shell ~]#
#默认是以回车为行分隔符,指定" "为行分隔符
[root@shell ~]# awk -v RS=" " '{print NR,$0}' test1.txt
1 abc
2 aaa
3 eee
4 sss
5 iaa
6 att
7 9kk
8 ssf
[root@shell ~]#
ORS是输出行分隔符,awk默认将“回车换行”当做“输出换行符”,可以用ORS定义输出行分隔符。
[root@shell ~]# awk '{print $0}' test1.txt
1 abc aaa eee sss
2 fea iaa att 9kk ssf
#设置“++++”为输出分隔符号
[root@shell ~]# awk -v ORS="++++" '{print NR,$0}' test1.txt
1 abc aaa eee sss++++2 fea iaa att 9kk ssf++++[root@shell ~]#
#设置“ ”为输入换分符,“++++”为输出换行符
[root@shell ~]# awk -v RS=" " -v ORS="++++" '{print NR,$0}' test1.txt
1 abc++++2 aaa++++3 eee++++4 sss
fea++++5 iaa++++6 att++++7 9kk++++8 ssf
++++[root@shell ~]#
FILENAME变量,是显示文件名
[root@shell ~]# awk '{print FILENAME,FNR,$0}' test1.txt
test1.txt 1 abc aaa eee sss
test1.txt 2 fea iaa att 9kk ssf
[root@shell ~]#
ARGV表示一个数组,这个数组中保存的是命令行所给定的参数。
[root@shell ~]# awk 'BEGIN{print "aaa"}' test1 test2
[root@shell ~]# awk 'BEGIN{print "aaa",ARGV[1]}' test1 test2
aaa test1
[root@shell ~]# awk 'BEGIN{print "aaa",ARGV[1],ARGV[2]}' test1 test2
aaa test1 test2
[root@shell ~]#
可以看到,先用BEGIN模式,输出一个字符串“aaa”,然后,传入两个文件的文件名作为参数,BEGIN模式正常执行了打印操作,输出了“aaa”字符串。当使用ARGV的时候,BEGIN模式把参数作为数组的值打印了出来。
ARGV[1]表示引用ARGV数组中的第二个元素的值,即对应的值为test1;ARGV[2]对应的值为test2(引用ARGV数组中的第三个元素)
[root@shell ~]# awk 'BEGIN{print "aaa",ARGV[0],ARGV[1],ARGV[2]}' test1 test2
aaa awk test1 test2
[root@shell ~]#
这里需要注意下,ARGV数组中第一个元素的值ARGV[0];在awk的规定中,pattern{ action }并不被看做是参数,awk会被看做为参数,即ARGV[0]对应的值为awk。
ARGC表示的是命令行参数的个数
[root@shell ~]# awk 'BEGIN{print "aaa",ARGV[0],ARGV[1],ARGV[2],ARGC}' test1 test2
aaa awk test1 test2 3
[root@shell ~]#
自定义变量
[root@shell ~]# awk -v Var_URL="www.wanhebin.com" 'BEGIN{print Var_URL}'
www.wanhebin.com
[root@shell ~]#
[root@shell ~]# awk 'BEGIN{ var_url="www.wanhebin.com"; print var_url}'
www.wanhebin.com
[root@shell ~]# awk 'BEGIN{ myvar1="111"; myvar2="222";print myvar1,myvar2}'
111 222
[root@shell ~]#
打赏
点赞
MySQL 数据库回档方案
MySQL 数据库回档方案
CentOS 8.X 安装软件报错 No available modular metadata for modular package
CentOS 8.X 安装软件报错 No available modular metadata for modular package
K8S 中使用 Prometheus 监控 JVM (二)
K8S 中使用 Prometheus 监控 JVM (二)