Linux文本处理三剑客之awk

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的输出如下[[email protected] ~]# 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的随机数                    
时间: 2024-11-07 11:24:59

Linux文本处理三剑客之awk的相关文章

Linux文本处理三剑客之awk(一)

  AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一.其名称得自于它的创始人阿尔佛雷德·艾侯.彼得·温伯格和布莱恩·柯林汉姓氏的首个字母.awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk.灵活的应用awk能够让我们的日常运维工作效率得到很大的提高. 一.基本用法: awk [options] 'program' var=value file- awk [options] -f programfile var=

Security-Enhanced Linux 文本处理三剑客之AWK

SELinux介绍 SELinux:Security-Enhanced Linux, 是美国国家安全局(NSA=The National Security Agency)和SCC(Secure Computing Corporation)开发的 Linux的一个强制访问控制的安全模块.2000年以GNU GPL发布,Linux内核 2.6版本后集成在内核中 DAC:Discretionary Access Control自由访问控制 MAC:Mandatory Access Control 强制

Linux文本处理三剑客之awk详解

前言 awk是一款强大的报告生成器,不同于sed和grep,它的侧重点是如何把文本信息更好的展示出来,常用与统计和格式化输出.awk相当于微型的shell,有着自己一套语法结构,例如:循环结构,数组,条件判断,函数,内置变量等功能.处理对象一般纯文本文件或纯文本信息. 用法详解 基本语法 awk [options] 'program' file file ... awk [options] 'PATTERN{action}' file file ... -F CHAR:输入分隔符 awk的输出

linux文本处理三剑客之grep

  一.linux文本处理三剑客介绍 linux中文本三剑客包括grep(egrep,fgrep),sed,awk,三者基本的功能如下: 工具名称 功能 grep,egrep,fgrep 文本过滤工具(搜索工具) sed stream editor, 流编辑器:文本编辑工具 awk 文本报告生成器 二.grep工具详解 1.grep的介绍: grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行

Linux文本处理&quot;三剑客&quot;--grep

稍微接触过linux都会知道有三个非常强大文本处理工具,那就是grep.sed和awk,想必都有听说过吧. Linux文本处理三剑客: grep, egrep, fgrep:文本过滤工具(模式:pattern): grep:基本正则表达式,支持-E,-F egrep:扩展正则表达式, 支持-G,-F fgrep:不支持正则表达式, sed:stream editor, 流编辑器:文本编辑工具: awk:Linux上的实现为gawk,文本报告生成器(格式化文本): 以上三款工具都支持正则表达式 正

Linux文本处理三剑客之grep一族与正则表达式

一,grep一族是什么? Linux上有三种常用的文本处理工具,分别为:grep(egrep.fgrep).sed.awk.这三者被称为Linux文本处理三剑客. grep一族:文本搜索工具 grep:支持使用基本正则表达式: egrep:支持使用扩展正则表达式,相当于grep -E: fgrep:不支持使用正则表达式,相当于grep -F; [PS:fgrep不需要加载正则表达式引擎,因此速度较快,fgrep的搜索效率在当文件达到几亿行时就能体现出来.(大型web网站一天的日志量都是几亿行的,

漫漫运维路——文本处理三剑客之awk基础

awk即gawk,是一款在Linux中实现文本格式化输出的文本处理工具,在Linux中与文本过滤工具grep和文本行编辑器sed共同组成Linux中的文本处理三剑客. awk在处理文本时以行为单位,读入整行数据后以指定的分隔符对行进行切片,然后再针对切片后的数据进行处理.如下图所示: 文本经过指定的分隔符进行切片后再对每一片进行处理,然后在根据设定的动作对处理后的文本执行动作,而切片后的文本如果只想引用一部分也可以使用变量进行引用,其引用的各个变量如下表所示: 变量 指代 $0.$N 当前处理行

linux文本处理三剑客—grep

cat:concatenate 文本文件查看工具 cat [option] filename... -n:给显示出来的文本行加上编号 -b:非空行编号 -V:显示 ^ -E:显示行结束符$ -T:显示制表符 -A:显示所有控制符-A=-VET -s:压缩连续的空行成一行 如:cat /etc/fstab /etc/passwd 同时查看多个文件 df | cut -d: tac:文本文件查看工具 用法同cat 只是文件内容的行逆序显示 rec:文本文件查看工具    用法同cat 只是文本文件每

linux文本处理三剑客之grep家族及其相应的正则表达式使用详解

一.Linux文本处理三剑客.grep家族和正则表达式介绍 Linux上文本处理三剑客: grep(egrep, fgrep):文本搜索工具:基于"pattern(过滤条件)"对目标文本进行逐行搜索操作: sed:Stream Editor,流编辑器行编辑工具:文本编辑工具: awk:GNU awk,文本格式化工具:文本报告生成器: grep家族: grep: Global search REgular expression and Print out the line,支持使用基本正