Shell三剑客:awk(内部变量)

2023-12-21 22:31:03

一、$0 :完整的输入记录

[root@localhost ~]# awk -F: '{print $0}' passwd.txt 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin10

?

二、ARGC :命令行参数的数目

[root@localhost ~]# awk 'BEGIN {print ARGC}' passwd.txt 
2

?

三、ARGIND :命令行中当前文件的位置(从0开始算)

[root@localhost ~]# awk 'BEGIN {print ARGIND}' passwd.txt 
0

?

四、ARGV :包含命令行参数的数组

[root@localhost ~]# awk 'BEGIN {print ARGV[0]}' passwd.txt 
awk
[root@localhost ~]# awk 'BEGIN {print ARGV[1]}' passwd.txt 
passwd.txt

?

五、CONVFMT :数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组

[root@localhost ~]# awk 'BEGIN {print CONVFMT}' passwd.txt 
%.6g

?

?六、FILENAME:当前文件名

[root@localhost ~]# awk '{print FILENAME}' passwd.txt 
passwd.txt
passwd.txt
passwd.txt
passwd.txt
passwd.txt
passwd.txt
passwd.txt
passwd.txt
passwd.txt
passwd.txt

?

七、FNR :各文件分别计数的行号

[root@localhost ~]# awk -F: '{print FNR,$0}' passwd.txt /etc/hosts
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin10
1 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
2 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

?

八、FS :字段分隔符(默认是任何空格)

[root@localhost ~]# awk -F'[:\t]' '{print $1,$2,$3}' passwd.txt
root x 0
bin x 1
daemon x 2
adm x 3
lp x 4
sync x 5
shutdown x 6
halt x 7
mail x 8
operator x 11

?

九、IGNORECASE:如果为真,则进行忽略大小写的匹配

[root@localhost ~]# awk -F: '{print IGNORECASE}' passwd.txt 
0
0
0
0
0
0
0
0
0
0

?

?十、NF :一条记录的字段的数目

[root@localhost ~]# awk -F: '{print $0,NF}' passwd.txt
root:x:0:0:root:/root:/bin/bash 7
bin:x:1:1:bin:/bin:/sbin/nologin 7
daemon:x:2:2:daemon:/sbin:/sbin/nologin 7
adm:x:3:4:adm:/var/adm:/sbin/nologin 7
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 7
sync:x:5:0:sync:/sbin:/bin/sync 7
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 7
halt:x:7:0:halt:/sbin:/sbin/halt 7
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 7
operator:x:11:0:operator:/root:/sbin/nologin10 7

?

十一、NR :已经读出的记录数,就是行号,从1开始

[root@localhost ~]# awk -F: '{print NR,$0}' passwd.txt /etc/hosts
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin10
11 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
12 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

?

十二、OFMT:数字的输出格式(默认值是%.6g)

[root@localhost ~]# awk -F: '{print OFMT}' passwd.txt 
%.6g
%.6g
%.6g
%.6g
%.6g
%.6g
%.6g
%.6g
%.6g
%.6g

?

十三、OFS :输出记录分隔符(输出换行符),输出时用指定的符号代替换行符

[root@localhost ~]# awk -F: '/root/{print $1,$2,$3,$4}' passwd.txt 
root x 0 0
operator x 11 0

?

十四、RLENGTH:由match函数所匹配的字符串的长度

[root@localhost ~]# awk '{print RLENGTH}' passwd.txt 
0
0
0
0
0
0
0
0
0
0

?

?十五、ORS :输出记录分隔符(默认值是一个换行符)

[root@localhost ~]# awk -F: 'BEGIN{ORS=""} {print $0}' passwd.txt 
root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologin10

?

十六、RS :记录分隔符(默认是一个换行符)

[root@localhost ~]# awk  'BEGIN{RS=":"} {print $0}' passwd1.txt
root
x
0
0
root
/root
/bin/bash

[root@localhost ~]# awk -F: 'BEGIN{RS=""} {print $0}' passwd.txt 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin10

?

?

文章来源:https://blog.csdn.net/weixin_73783595/article/details/135139848
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。