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. [洛谷P3807]【模板】卢卡斯定理

    题目大意:给你$n,m,p(p \in \rm prime)$,求出$C_{n + m}^m\bmod p(可能p\leqslant n,m)$ 题解:卢卡斯$Lucas$定理,$C_B^A\bmod ...

  2. jQuery 鼠标滚轮事件

    使用插件 jquery-mousewheel 下载 $('body').mousewheel(function(event, delta) { ? 'Up' : 'Down'; if (dir == ...

  3. HTML标签的使用要注意语义化

    语义化标签:你认为用什么标签最能描述这块内容,觉得这样表述更有意义,那么就可以使用这个标签. 现在的浏览器对CSS支持都挺完善的(不包括CSS3),讲究的是结构与表现相分离,结构与行为相分离,一个WE ...

  4. [ CodeVS冲杯之路 ] P3117

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/3117/ 啊啊啊,基础的高精度乘法被我写得又臭又长,以后再来优化代码(DP着哪天能够把加减乘除全部写一边贴上来,哦对还有 ...

  5. mysql server5.7 找不到my.ini,只有my-default.ini【mysql全局配置文件】

    起因是在尝试将csv文件导入mysql的table时,出现如下错误: “The MySQL server is running with the --secure-file-priv option s ...

  6. UVA 10912 Simple Minded Hashing

    题意就略了.刚一看被数据吓住了.看到字符要求严格递增.那么如果字串长大于26那必然方案数目为0:同时1+2+3....+24+25+26=351如果大于这个数也是不可能的 令dp[i][j][k]表示 ...

  7. v4l2读取摄像头程序流程解析【转】

    转自:https://my.oschina.net/u/1024767/blog/210801 v4l2 操作实际上就是 open() 设备, close() 设备,以及中间过程的 ioctl() 操 ...

  8. com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/annotation/ColorRes.class

    保存信息如上: 我在添加一个支持库的时候遇的问题,这个库com.yanzhenjie:album:1.0.5 这是由于v4包重复导致的,在网上我也找过多种解决方案   用了这种,方式 configur ...

  9. 【一】ODB - C++ 访问数据库的利器--Hello World On Windows(Version-24)

    本文以MySQL数据库为例,其他数据类似. 官方文档和下载 ODB官方首页    官方开发者说明书(开发教程) 安装下载首页(下载与安装教程Windows/Linux) Windows安装步骤(都是英 ...

  10. Django简单设置cookies和session

    一.Cookie cookie及特点 Cookie是由服务器(网站)生成的,存储在浏览器端的 键值对数据(通常经过加密) 在响应请求时,服务器会把生成 Cookie数据 发给浏览器,浏览器会自动保存( ...