在上一篇文章中,当我要查看当前ip那个访问量最高的时候,用到了命令awk,其实awk与grep命令类似,都是linux中特用的文本搜索命令,不过awk命令是查找特定的字符然后显示出来。grep命令指示查找特定的字符。废话不多说,直接奉上学习过程!
1. 基本语法 awk [-F field-separator] 'commands' file
1.1 显示最近登录的5个帐号
# last -n 5 root pts/0 192.168.0.74 Thu Apr 21 09:44 still logged in reboot system boot 2.6.32-573.22.1. Thu Apr 21 09:37 - 14:50 (05:12) root pts/0 192.168.0.64 Wed Apr 20 18:34 - down (00:00) root pts/0 192.168.0.64 Wed Apr 20 09:35 - 18:34 (08:59) reboot system boot 2.6.32-573.22.1. Wed Apr 20 09:33 - 18:34 (09:01) wtmp begins Thu Mar 31 14:59:25 2016
1.2 使用awk命令只显示他们的用户名
# last -n 5 | awk '{print $1}' root reboot root root reboot wtmp
1.2.1 awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推。
2. 使用 -F 作为分隔符
2.1 我们也可以使用-F指定分隔符,例如
last -n 5 | awk -F ':' '{print $1}' root pts/0 192.168.0.74 Thu Apr 21 09 reboot system boot 2.6.32-573.22.1. Thu Apr 21 09 root pts/0 192.168.0.64 Wed Apr 20 18 root pts/0 192.168.0.64 Wed Apr 20 09 reboot system boot 2.6.32-573.22.1. Wed Apr 20 09 wtmp begins Thu Mar 31 14
2.1.2 当使用 : 作为分隔符,本来第一行是 “root pts/0 192.168.0.74 Thu Apr 21 09:44 still logged in ” 也就被分割为 “root pts/0 192.168.0.74 Thu Apr 21 09”和“44 still logged in ” 这两个部分!$1 则代表前一部分,$2 则代表后一个部分
3. 查看登陆的ip地址
# last -n 5 | awk '{print $1"\t" $3}' root 192.168.0.74 reboot boot root 192.168.0.64 root 192.168.0.64 reboot boot wtmp Thu
4. 在输出信息的头部和尾部添加自己想要输出的信息
4.1 在头部加入name,ip 在尾部加入 ok,end
# last -n 5 | awk 'BEGIN {print "name,ip"} {print $1","$3} END {print "ok,end"}' name,ip root,192.168.0.74 reboot,boot root,192.168.0.64 root,192.168.0.64 reboot,boot wtmp,Thu ok,end
4.2 awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。
5. 使用正则表达式进行搜索
last -n 5 | awk -F : '/root/' root pts/0 192.168.0.74 Thu Apr 21 09:44 still logged in root pts/0 192.168.0.64 Wed Apr 20 18:34 - down (00:00) root pts/0 192.168.0.64 Wed Apr 20 09:35 - 18:34 (08:59)
5.1 '/partern/'写的是你的正则
5.2 正则表达式遵循的几个重复的操作
? 最多匹配一次
* 匹配零次或者任意多次
+ 匹配一次以上
{n} 匹配n次
{n,} 最少匹配n次
{,m} 最多匹配m次
{n,m} 匹配n到m次
5.3 使用正则并且只显示他们的用户名
# last -n 5 | awk -F : '/r.*ot/{print $1}' root reboot root root reboot
参考链接 http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html(awk编程)
结束语
本文有任何错误,或有任何疑问,欢迎留言说明。
网友最新评论