文本处理三剑客之awk——从入门到放弃
Posted getbird
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本处理三剑客之awk——从入门到放弃相关的知识,希望对你有一定的参考价值。
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]++ENDfor (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
以上是关于文本处理三剑客之awk——从入门到放弃的主要内容,如果未能解决你的问题,请参考以下文章