linux awk 命令如何使用

ixibei 发表于 分类:Linux 阅读(1255) 评论(0)

简介:

在上一篇文章中,当我要查看当前ip那个访问量最高的时候,用到了命令awk,其实awk与grep命令类似,都是linux中特用的文本搜索命令,不过awk命令是查找特定的字符然后显示出来。grep命令指示查找特定的字符。废话不多说,直接奉上学习…

在上一篇文章中,当我要查看当前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编程)

结束语

本文有任何错误,或有任何疑问,欢迎留言说明。

本站文章除注明转载外,均为原创文章,会经常更新知识点以及修正一些错误,因此转载请保留原出处,方便溯源,避免陈旧错误知识的误导,同时有更好的阅读体验。

http://www.onephper.com/archive/20.html

相关推荐

评论

回复给XXX取消回复

说点什么吧...

网友最新评论

输入关键字