快速上手 ¶
本文导航
作者: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在内部已经做好片段读取的工作了