1.简介      awk是linux下的一个命令,他对其他命令的输出,对文件的处理都十分强大。相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。其实他更像一门编程语言,他可以自定义变量,有条件语句,有循环,有数组,有正则,有函数等。他读取输出,或者文的方式是一行,一行的读,根据你给出的条件进行查找,并在找出来的行中进行操作,感觉他的设计思想,真的很简单,但是结合实际情况,具体操作起来就没有那么简单了。       awk有三种形势,awk,gawk,nawk,平时所说的awk其实就是gawk。

2.awk的工作原理      awk 'BEGIN{ commands } pattern{ commands } END{ commands }'      第一步:执行BEGIN{ commands }语句块中的语句;     第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }                 语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文                 件全部被读取完毕。      第三步:当读至输入流末尾时,执行END{ commands }语句块。BEGIN语句                 块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,                  比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语                  句块中。 END语句块在awk从输入流中读取完所有的行之后即被执行                  ,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成                  ,它也是一个可选语句块。 pattern语句块中的通用命令是最重要的部                  分,它也是可选的。如果没有提供pattern语句块,则默认执行{ print }                  ,即打印每一个读取到的行,awk读取的每一行都会执行该语句块。     

3.awk工作模式    模式可以是以下任意一个: /正则表达式/:使用通配符的扩展集。关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。模式匹配表达式:用运算符~(匹配)和~!(不匹配)。BEGIN语句块、pattern语句块、END语句块。

4.实例假设last -n 5的输出如下[root@www ~]# last -n 5 <==仅取出前五行root     pts/1   192.168.1.100  Tue Feb 10 11:21   still logged inroot   pts/1   192.168.1.100  Tue Feb 10 00:46 - 02:28  (01:41)root     pts/1   192.168.1.100  Mon Feb  9 11:41 - 18:30  (06:48)dmtsai   pts/1   192.168.1.100  Mon Feb  9 11:41 - 11:41  (00:00)root     tty1                   Fri Sep  5 14:09 - 14:10  (00:01)如果只是显示最近登录的5个帐号#last -n 5 | awk  '{print $1}'rootrootrootdmtsairootawk

工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推。

如果只是显示/etc/passwd的账户#cat /etc/passwd |awk  -F ':'  '{print $1}'  rootdaemonbinsys这种是awk+action的示例,每行都会执行action{print $1}。-F指定域分隔符为':'。

如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割#cat /etc/passwd |awk  -F ':'  '{print $1"\t"$7}'root    /bin/bashdaemon  /bin/shbin     /bin/shsys     /bin/sh

如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。cat /etc/passwd |awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}'name,shellroot,/bin/bashdaemon,/bin/shbin,/bin/shsys,/bin/sh....blue,/bin/nosh

搜索/etc/passwd有root关键字的所有行#awk -F: '/root/' /etc/passwdroot:x:0:0:root:/root:/bin/bash这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。搜索支持正则,例如找root开头的: awk -F: '/^root/' /etc/passwd

搜索/etc/passwd有root关键字的所有行,并显示对应的shell# awk -F: '/root/{print $7}' /etc/passwd             /bin/bash 这里指定了action{print $7}         5,运算符运算符描述= += -= *= /= %= ^= **=    赋值    ?:    C条件表达式    ||    逻 辑或    &&    逻辑与    ~ ~!    匹 配正则表达式和不匹配正则表达式    < <= > >= != ==    关 系运算符    空格    连接    + -    加,减    * / &    乘,除与求余    + - !    一元加,减和逻辑非    ^ ***    求幂    ++ --    增加或减少,作为前缀或后缀    $    字 段引用    in    数组成员    

例子:awk 'BEGIN{a="b";print a++,++a;}' 0 2

6,awk的正则匹配符描述\Y    匹配一个单词开头或者末尾的空字符串    \B    匹配单词内的空字符串    \<    匹配一个单词的开头的空字符串,锚定开始    \>    匹配一个单词的末尾的空字符串,锚定末尾    \W    匹配一个非字母数字组成的单词    \w    匹配一个字母数字组成的单词    \'    匹配字符串末尾的一个空字符串    \‘    匹配字符串开头的一个空字符串    

7,字符串函数函数名描述sub    匹配记录中最大、最靠左边的子字符串的正则表达式,并用替换字符串替换这些字符串。如果没有指定目标字符串就默认使用整个记录。替换只发生在第一次匹配的 时候    gsub    整个文档中进行匹配    index    返回子字符串第一次被匹配的位置,偏移量从位置1开始    substr    返回从位置1开始的子字符串,如果指定长度超过实际长度,就返回整个字符串    split    可按给定的分隔符把字符串分割为一个数组。如果分隔符没提供,则按当前FS值进行分割    length    返回记录的字符数    match    返回在字符串中正则表达式位置的索引,如果找不到指定的正则表达式则返回0。match函数会设置内建变量RSTART为字符串中子字符串的开始位 置,RLENGTH为到子字符串末尾的字符个数。substr可利于这些变量来截取字符串    toupper和tolower    可用于字符串大小间的转换,该功能只在gawk中有效    

8,数学函数函数名返回值atan2(x,y)    y,x 范围内的余切    cos(x)    余弦函数    exp(x)    求 幂    int(x)    取整    log(x)    自然对 数    rand()    随机数    sin(x)    正弦    sqrt(x)    平 方根    srand(x)    x是rand()函数的种子    int(x)    取 整,过程没有舍入    rand()    产生一个大于等于0而小于1的随机数

转载于:https://blog.51cto.com/willis/1845918

Linux文本处理三剑客之awk相关推荐

  1. Linux文本处理三剑客(awk、grep、sed)

    目录 grep 简介 实际使用 小结 sed awk 名字由来 强大的文本处理工具 语法 域 模式&动作 结合正则 复合表达式 printf 格式化输出 内置变量 内置函数 awk脚本 gre ...

  2. linux getline函数用法,Linux文本处理三剑客之awk学习笔记05:getline用法详解

    getline用法详解 在默认情况下,awk支持从文件或者STDIN中读取数据.我们也可以使用getline来灵活读取数据,例如在main代码块执行过程中读取某个非待处理文件的数据,或者从某个读取某个 ...

  3. linux 下 grep -c sh* /etc/passwd,Linux文本处理三剑客--grep

    稍微接触过linux都会知道有三个非常强大文本处理工具,那就是grep.sed和awk,想必都有听说过吧. Linux文本处理三剑客: grep, egrep, fgrep:文本过滤工具(模式:pat ...

  4. Linux文本处理必杀技之awk应用详解

    AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一.这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯.彼得·温伯格和布莱恩·柯林汉姓氏的首个字母 ...

  5. Linux文本处理三剑客之sed

    推荐新手阅读[酷壳]或[骏马金龙]开篇的教程作为入门.骏马兄后面的文章以及官方英文文档较难. [酷壳]:https://coolshell.cn/articles/9104.html [骏马金龙-博客 ...

  6. Linux 文件管理-文件内容-分析工具【awk】脚本处理文本和数据-Linux 文本操作三剑客

    1. awk简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是li ...

  7. awk 内嵌正则 提取字符串_干货-Shell编程文本处理三剑客之-awk

    awk 在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互的情况下实现相当复杂 ...

  8. 9、Linux文本处理三剑客之sed命令

    Linux 用于处理文本数据的三剑客,分别为 grep 命令.awk 命令和 sed 命令,再加上正则表达式,就可以处理文本文件中各种常见的数据需求了.一般来说,grep 命令倾向于查找,sed 命令 ...

  9. linux 删除所有a字符串,linux文本处理三剑客(grep、sed、akw)命令选项整理

    摘要:Linux中最重要的三个命令:awk,sed,grep,在业界被称为"三剑客". 1.grep和egrep(过滤器) grep: grep [选项][匹配条件][file1 ...

最新文章

  1. 微生物入侵:过程、模式与机制
  2. 【内推】腾讯优图(深圳)实验室招计算机视觉算法实习生
  3. 【物联网智能网关-15】WAV播放器(WinForm+WavPlay库实例)
  4. 19.VS属性管理器窗口不见了怎么办?
  5. virtualbox主机网络管理 未能创建_NETworkManager(网络管理软件)官方版2020.12.0下载
  6. nginx中的数组结构ngx_array_t
  7. 从用户观点对计算机如何分类,从用户的观点看操作系统是
  8. 尝试引用已删除的函数_如何在Excel中使用ROW函数
  9. SAP License:自动过账科目设置
  10. php框架开发(草稿)
  11. linux a7 a8,iOS12 A7/A8 固定Generator值 图文教程
  12. 百度搜索引擎工作原理
  13. jQuery实践-别踩白块儿网页版
  14. HDOJ 5296 Annoying problem LCA+数据结构
  15. 为您揭秘当今直播源码为何如此火爆
  16. 台式电脑系统崩掉该如何?
  17. PHP打印对象 用[]可以 用.不可以 不知所以然
  18. 【001-Shader-颜色混合】
  19. MDK-ARM V5.28的Bug被修复了吗?
  20. 计算机专业博士推荐信模板,计算机推荐信模板

热门文章

  1. openresty开发系列17--lua中的正则表达式
  2. 苹果的 Metal 工程
  3. 201521123031 《Java程序设计》第6周学习总结
  4. mvn filter autoconfig 产生自动配置
  5. 使用ajax进行汽车详情表的查询
  6. 用python 10min手写一个简易的实时内存监控系统
  7. vi文本编辑器的使用
  8. 推荐几个Linux命令行下性能监控小工具
  9. 别让扁平化设计平淡无奇
  10. 适合创业团队使用的团队协作工具大盘点