快速上手

  • 作者:KK

  • 发表日期:2017.10.9


简单试试

awk是linux系统下的一个命令,比如awk -F : '{print $1}' /etc/passwd这样就是以passwd文件作为基本内容,输出里面的每一行配置内容里的用户名,输出内容如下:

root
daemon
bin
sys
sync
games
man
lp
mail
news
uucp
proxy
www-data
backup
list
irc
gnats
nobody
systemd-timesync
systemd-network
systemd-resolve
systemd-bus-proxy
Debian-exim
messagebus
statd
sshd
mysql
www

-F参数指定了以什么符号作为分割符号(因为passwd文件里都是以:号隔开一个个内容的嘛),然后print $1就是说输出每一行的第1个分割元素,当然你可以试试$6就会输出各用户的主目录了


默认以空格作为分割符

df -h | awk '{print $2}'会输出各个磁盘的总容量,内容如下:

Size
50G
10M
202M
504M
5.0M
504M
9.8G

df命令输出的内容每一行的内容都是以空格隔开的,其实awk的-F参数默认就是空格,而且包含了连续多个空格


介绍

固然awk这么用的话它是一个命令,而其实上里面的{print xxx}这个花括号里面是可以写很多不同的脚本代码的,我们又叫做awk脚本,其实awk也被作者定义为一个编程语言,属于脚本类语言

它经常用于文件数据分析统计、过滤提取(数据源可以是指定文件或者是标准输入数据),运行速度通常远比你用PHP等语言高效,所以如果求简单快捷,那建议大家尽量用awk吧,常用知识学习成本不大,菜鸟几小时、老鸟1小时内可以掌握

awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Peter Weinberger和Brian Kernighan

gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展,我目前在CentOS和Debian上接触的awk都是gawk,而在Ubuntu下接触的是mawk,还有一个nawk,不过就不介绍了,反正据说大部分人都倾向使用gawk


实际应用

以我自己的应用经验来说吧,我曾用awk分析过apache的访问日志,分析访问次数最多的前10个IP(寻找疑似攻击者)、最多人用的浏览器和版本、访问次数最多的100个接口和页面等等

其实据了解很多人都是拿来做日志分析,毕竟日志文件太太多数据了,自己编程序分析很折腾的,光是读文件内容的一刻就会被庞大的文件内容挤爆内存,而awk在内部已经做好片段读取的工作了