文本处理三剑客之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——从入门到放弃的主要内容,如果未能解决你的问题,请参考以下文章

文本三剑客之awk-从入门到入土

awk从入门至放弃

G1从入门到放弃(二)

python从入门到放弃之图像处理

gentoo从入门到放弃

cmake从入门到放弃