awk是文本处理三剑客之首,功能及其强大且支持正则表达式(包括基础正则和拓展正则)。
awk支持(三剑客都支持)以文件作为操作对象,以及从标准输出里面接受内容。
[[email protected] ~]# head /etc/passwd | awk -F ":" ‘{print $1}‘
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
[[email protected] ~]# head /etc/passwd > test
[[email protected] ~]# awk -F ":" ‘{print $1}‘ test
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
想要学会awk首先需要知道的几个基础概念:
awk的格式
awk指令是由模式、动作或者模式和动作组合而成。
[[email protected] ~]# awk ‘/root/{print $0}‘ test
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
以上命令的/root/——就是属于awk的模式,模式的含义是匹配root。
{print $0} ——就是动作,答应出匹配行的整行内容。
FS含义——field separator——字段分隔符
[[email protected] ~]# awk -F ":" ‘{print $1}‘ test
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
命令行中的-F——指定分隔符,“:”——以冒号为分隔符号。
NR含义——number of record——记录的编号,也就是行号。
要知道记录的编号的含义首先需要知道awk的执行过程——awk在执行过程中以行为处理单位,如果第一行满足模式的要求就执行动作,如果不满足就继续读取下一行。
[[email protected] ~]# awk ‘NR>=1&&NR<=4 {print $0}‘ test
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
含义:如果行号NF大于等于1小于等于4,打印其内容。
NF——number of feild——字段数量
要使用NF首先必须指定-F选项来指定分隔符号,awk也只有这一个选项。
[[email protected] ~]# awk -F ":" ‘{print $7}‘ test
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
$7——就是指的由分隔符分开后的第七个字段。
实现相同的功能还可以:
[[email protected] ~]# awk -F ":" ‘{print $NF}‘ test
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
这里的NF就等于7——字段的数量。
实例:使用awk实现本机ip的取出
[[email protected] ~]# ip a | awk -F "[ /]+" ‘/inet.*ens33/ {print $3}‘
192.168.27.100
/inet.*ens33/——匹配特定行
[[email protected] ~]# ip a | awk ‘/inet.*ens33/ {print $0}‘
inet 192.168.27.100/24 brd 192.168.27.255 scope global ens33
print $3——打印分隔后的第三个字段
【 /】+——分隔符的定义。
实例:取出访问日志文件的ip,并显示访问次数,且排序。
[[email protected] ~]# awk -F " " ‘{ken[$1]++}END{for (i in ken) print ken[i],i}‘ access.log | sort -rn | head
1461 124.200.101.50
825 43.252.231.204
106 183.17.230.63
48 210.22.98.114
37 61.158.146.81
27 23.100.232.233
20 61.129.8.179
20 101.227.139.161
17 61.151.178.197
17 61.151.178.177
原文地址:https://www.cnblogs.com/getbird/p/11178405.html