zoukankan      html  css  js  c++  java
  • awk使用记录

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

    例1:显示最近登录的5个账号

    1. 使用last -n 5 命令可以查看最近登录的5个账号的所有信息
    yangkun  pts/2        60.118.118.118    Thu Jul  6 15:24   still logged in   
    li4      pts/0        60.118.118.118    Thu Jul  6 14:42   still logged in   
    zhangsan   pts/4        60.118.118.118    Thu Jul  6 12:34   still logged in   
    zhangsan   pts/3        60.118.118.118    Thu Jul  6 11:01 - 14:13  (03:12)    
    zhangsan   pts/3        60.118.118.118    Thu Jul  6 11:01 - 11:01  (00:00)   
    
    1. 使用awk命令截取用户名
    last -n 5 | awk '{print $1}'
    
    awk工作流程是这样的:读入有'
    '换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,
    $0则表示所有域,$1表示第一个域,$n表示第n个域。
    默认域分隔符是 "空格" 或 "tab键", 所以$1表示登录用户,$3表示登录ip,以此类推.
    
    




    例2:以passwd文本为例,进行awk操作

    • passwd文件格式:
    用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
    
    http://blog.csdn.net/a1154490629/article/details/52190801
    
    1. 显示/etc/passwd中的账户
    cat /etc/passwd | awk  -F ':'  '{print $1}'     //-F 指定域的分隔符为 ':'
    
    1. 显示账户和账户对应shell,以tab键分割
    cat /etc/passwd | awk -F ':' '{print $1 "	" $7}'
    
    1. 显示账户和账户对应shell,以逗号分割,并添加列名 name,shell 在最后一行添加 test,/bin/test
    cat /etc/passwd | awk -F ':' 'BEGIN {print "name,shell"}  {print $1","$7} END {pritn "test,/bin/test"}'
    
    awk工作流程是这样的:先执行BEGING,然后读取文件,
    读入有/n换行符分割的一条记录,
    然后将记录按指定的域分隔符划分域,填充域,
    $0则表示所有域,$1表示第一个域,
    $n表示第n个域,随后开始执行模式所对应的动作action。
    接着开始读入第二条记录,直到所有的记录都读完,最后执行END操作。
    
    1. 搜索passwd有root关键字的所有行
    awk -F: '/root/' /etc/passwd
    
    这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。
    
    1. 搜索支持正则,查找以root开头,并输出对应的shell
    awk -F ':' '/^root/{print $7}' /etc/passwd
    
    这里指定了action{print $7}
    
    1. 统计passwd:文件名,每行的行号,每行的列数,对应的完整行内容:
    awk  -F ':'  '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd
    注: 这里的FILENAME,NR等为固定字符不可修改
    
    
    使用printf替代print,可以让代码更加简洁,易读
    awk  -F ':'  '{printf("filename:%s,linenumber:%s,columns:%s,linecontent:%s
    ",FILENAME,NR,NF,$0)}' /etc/passwd
    
    
  • 相关阅读:
    perl 获取铜板街页码
    $response->decoded_content 和$response->content
    基于Netty5.0高级案例之请求响应同步通信
    [Err] 1091
    [Err] 23000
    [Err] 42000
    perl 爬取 find_by_tag_name
    perl 爬取html findvalues 方法
    perl 安装DBI和DBD
    js setTimeout 参数传递使用介绍
  • 原文地址:https://www.cnblogs.com/0xcafedaddy/p/7126572.html
Copyright © 2011-2022 走看看