码迷,mamicode.com
首页 > 其他好文 > 详细

文本处理三剑客之awk——从入门到放弃

时间:2019-07-12 21:18:40      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:这一   一个   支持   功能   ns3   访问日志   mail   end   选项   

awk是文本处理三剑客之首,功能及其强大且支持正则表达式(包括基础正则和拓展正则)。

awk支持(三剑客都支持)以文件作为操作对象,以及从标准输出里面接受内容。

[root@localhost ~]# head /etc/passwd | awk -F ":" ‘{print $1}‘
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator

[root@localhost ~]# head /etc/passwd > test
[root@localhost ~]# awk -F ":" ‘{print $1}‘ test
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator


想要学会awk首先需要知道的几个基础概念:

awk的格式

awk指令是由模式、动作或者模式和动作组合而成。

[root@localhost ~]# 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——字段分隔符

[root@localhost ~]# awk -F ":" ‘{print $1}‘ test
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator

命令行中的-F——指定分隔符,“:”——以冒号为分隔符号。

NR含义——number of record——记录的编号,也就是行号。

要知道记录的编号的含义首先需要知道awk的执行过程——awk在执行过程中以行为处理单位,如果第一行满足模式的要求就执行动作,如果不满足就继续读取下一行。

[root@localhost ~]# 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也只有这一个选项。

[root@localhost ~]# 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——就是指的由分隔符分开后的第七个字段。

实现相同的功能还可以:

[root@localhost ~]# 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的取出

[root@localhost ~]# ip a | awk -F "[ /]+" ‘/inet.*ens33/ {print $3}‘
192.168.27.100

/inet.*ens33/——匹配特定行

[root@localhost ~]# ip a | awk ‘/inet.*ens33/ {print $0}‘
    inet 192.168.27.100/24 brd 192.168.27.255 scope global ens33

print $3——打印分隔后的第三个字段

【 /】+——分隔符的定义。

实例:取出访问日志文件的ip,并显示访问次数,且排序。

[root@localhost ~]# 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

 

文本处理三剑客之awk——从入门到放弃

标签:这一   一个   支持   功能   ns3   访问日志   mail   end   选项   

原文地址:https://www.cnblogs.com/getbird/p/11178405.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!