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

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

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

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

  • passwd文件格式:
  1. 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
  2. http://blog.csdn.net/a1154490629/article/details/52190801
  1. 显示/etc/passwd中的账户
  1. cat /etc/passwd | awk -F ':' '{print $1}' //-F 指定域的分隔符为 ':'
  1. 显示账户和账户对应shell,以tab键分割
  1. cat /etc/passwd | awk -F ':' '{print $1 "\t" $7}'
  1. 显示账户和账户对应shell,以逗号分割,并添加列名 name,shell 在最后一行添加 test,/bin/test
  1. cat /etc/passwd | awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {pritn "test,/bin/test"}'
  2. awk工作流程是这样的:先执行BEGING,然后读取文件,
  3. 读入有/n换行符分割的一条记录,
  4. 然后将记录按指定的域分隔符划分域,填充域,
  5. $0则表示所有域,$1表示第一个域,
  6. $n表示第n个域,随后开始执行模式所对应的动作action
  7. 接着开始读入第二条记录,直到所有的记录都读完,最后执行END操作。
  1. 搜索passwd有root关键字的所有行
  1. awk -F: '/root/' /etc/passwd
  2. 这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。
  1. 搜索支持正则,查找以root开头,并输出对应的shell
  1. awk -F ':' '/^root/{print $7}' /etc/passwd
  2. 这里指定了action{print $7}
  1. 统计passwd:文件名,每行的行号,每行的列数,对应的完整行内容:
  1. awk -F ':' '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd
  2. 注: 这里的FILENAME,NR等为固定字符不可修改
  3. 使用printf替代print,可以让代码更加简洁,易读
  4. awk -F ':' '{printf("filename:%s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}' /etc/passwd

awk使用记录的更多相关文章

  1. awk用法

    目前虽然有很多工具可以代替awk,但是呢我还是认为awk还是非常重要,比如有时候load数据到hive,mysql发现数据有点问题,这样可以先对比文件和库中数据是否一致,这样awk就发挥用处了,还有从 ...

  2. [Linux] AWK命令详解(大全)

    转载自:http://caoyanbao.iteye.com/blog/570868 什么是awk? 你可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk ...

  3. awk 手册--【转载】

    1. 前言 有关本手册 : 这是一本awk学习指引,  其重点着重于 : l         awk 适于解决哪些问题 ? l         awk 常见的解题模式为何 ? 为使读者快速掌握awk解 ...

  4. awk中文手册

    1. 前言 有关本手册 : 这是一本awk学习指引, 其重点着重于 : l        awk 适于解决哪些问题 ? l        awk 常见的解题模式为何 ? 为使读者快速掌握awk解题的模 ...

  5. AWK print学习

    Awk是一种处理结构数据并输出格式化结果的编程语言, Awk 是其作者 "Aho,Weinberger,Kernighan" 的简称. Awk通常被用来进行格式扫描和处理.通过扫描 ...

  6. 见过的最好AWK手册

    原文: http://linuxfire.com.cn/~lily/awk.html 简体中文版由bones7456 (http://li2z.cn)整理. 原文:应该是 http://phi.sin ...

  7. 【译】 AWK教程指南 9读取命令行上的参数

    大部分的应用程序都允许使用者在命令之后增加一些选择性的参数.执行awk时这些参数大部分用于指定数据文件文件名,有时希望在程序中能从命令行上得到一些其它用途的数据.本小节中将叙述如何在awk程序中取用这 ...

  8. 【译】 AWK教程指南

    前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...

  9. linux awk浅析(转)

    Awk 是一种非常好的语言,同时有一个非常奇怪的名称.在本系列(共三篇文章)的第一篇文章中,Daniel Robbins 将使您迅速掌握 awk 编程技巧.随着本系列的进展,将讨论更高级的主题,最后将 ...

随机推荐

  1. Web实现数据库链接的登录注册修改密码功能

    /** * Copyright (C), 2017-2017 * FileName: User * Author: ichimoku * Date: 2017/12/5 14:31 * version ...

  2. Linux系统—— core 文件

    Linux core 文件介绍 1. core文件的简单介绍 在一个程序崩溃时,它一般会在指定目录下生成一个core文件.core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的. 2. ...

  3. vue数组对象修改触发视图更新

    直接修改数组元素是无法触发视图更新的,如 this.array[0] = { name: 'meng', age: 22 } 修改array的length也无法触发视图更新,如 this.array. ...

  4. 《c程序设计语言》读书笔记-5.3-指针实现strcat

    #include <stdio.h> #include <math.h> #include <stdlib.h> #include <string.h> ...

  5. Codeforces Round #516 (Div. 2)D. Labyrinth

    D. Labyrinth 题目链接:https://codeforces.com/contest/1064/problem/D 题意: 给出一个n*m的矩阵以及人物的起点,并且给出x,y,分别代表这个 ...

  6. vue的过渡效果

    https://segmentfault.com/a/1190000007738518

  7. 托福、雅思和GRE的区别

    托福雅思GRE区别在哪里?对于准备申请美国硕士生的同学们来说,必须了解这一点,才能根据自身实际情况进行有针对性的复习,下面我们来进行详细介绍,为同学们指点迷津. - GRE是由美国教育考试服务处(Ed ...

  8. webpack最佳入门实践系列(3)

    6.使用图片 6.1.尝试在css中引入图片 在src目录下新建css文件夹,并且在css文件夹下创建app.css文件,在src目录下新建images文件夹,放入一张图片,在app.css中引入这张 ...

  9. 【MFC】画线

    1.DrawTestDlg.h afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnLButtonUp(UINT ...

  10. centos7部署nagios

    一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...