一、awk工具
1.1awk内置变量
- FS:指定每行文本的字段分隔符,缺省为空格或制表位
- NF:当前处理的行的字段个数
- NR:当前处理的行的行号(序数)
- $0:当前处理的行的整行内容
- $n:当前处理行的第n个字段(第n列)
1.2awk的用法
- 按行输出文本
- 按字段输出文本
- 通过管道、双引号调用Shell命令
1.3awk工作原理
- 逐行读取文本,默认以空格为分隔符,将分割所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令
1.4AWK的版本
- AWK:原先来源于AT & T 实验室的AWK
- NAWK:New awk, AT & T 实验室的AWK的升级版
- GAWK:即GUN AWK。所有的GUN/Linux发布版都自带GAWK,它与AWK和NAWK完全兼容
- GUN AWK 用户手册文档
1.5awk详解
在Linux/UNIX系统中,awk是一个功能强大的编辑工具,逐行读取输入文本,默认以空格或tab键作为分隔符作为分隔,并按模式或者条件执行编辑命令。而awk比较倾向于将一行分成多个字段然后进行处理。AWK信息的读入也是逐行指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互的情况下实现相当复杂的文本操作,被广泛应用于shell脚本,完成各种自动化配置任务。
二、基础用法
[root@localhost ky15]# awk '{print}'
#再打印一遍
aa
aa
bb
bb
cc
cc
[root@localhost ky15]# awk '{print "hello"}'
1
hello
2
hello
3
hello[root@localhost ky15]# awk 'BEGIN {print "hello"}'
#BEGIN比较特殊值打一行
hello
2.1打印挂载点中的第五列的内容
[root@localhost ky15]# df |awk '{print $5}'
已用%
10%
0%
0%
1%
0%
4%
1%
0%
2.2有多行就打印多少hello
[root@localhost ky15]# awk '{print "hello"}' /etc/passwd
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
2.3打印网卡里面的IP地址
[root@localhost ky15]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.157.101 netmask 255.255.255.0 broadcast 192.168.157.255
inet6 fe80::771:e554:a619:3bf2 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:1b:e2:c6 txqueuelen 1000 (Ethernet)
RX packets 12173 bytes 890456 (869.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4836 bytes 539129 (526.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ky15]# ifconfig ens33|sed -n '2p'
inet 192.168.157.101 netmask 255.255.255.0 broadcast 192.168.157.255
- awk sed组合提取
[root@localhost ky15]# ifconfig ens33|sed -n '2p'|awk '{print $2}'
192.168.157.101
- awk简化提取
[root@localhost opt]# ifconfig ens33 |awk '/netmask/{print $2}'
192.168.157.101
- sed复杂提取
[root@localhost ~]# ifconfig ens33|sed -rn '2s/[^0-9]+([0-9.]+) .*/\1/p'
192.168.157.101
2.4查看文件所有类容