awk

作者: 忧忧草_a195 | 来源:发表于2019-01-16 11:24 被阅读15次

AWK:文本编辑器. 也是一种非交互式的编辑器,一种编程语言

功能:

对文本数据进行汇总和处理,是一个报告生成器,能够对数据进行排版

工作模式:

1. 行工作模式,读入一行文件,存在“$0”里 

 2. 使用内置变量FS(字段分隔符)分割一行,存到$1-$100 

 3. 输出时也是用内置变量OFS,输出该行 

与sed主要异同:

相同点:

1.他们的语法基本相同

2.他们都是流编辑器,工作方式都是读入一行,处理动作,输出结果

3.他们都可以使用正则表达式作模式匹配

4.他们都允许使用脚本

不同点:

1.sed主要处理行,awk主要处理列

2.sed处理动作必须与文件内容相关,awk处理动作可以与文件内容无关,并且awk的动作要用{}括起来.

1. awk的语法:

awk [选项] '模式{动作...}' 文件列表...

2. 简单使用:

# awk -F: '/root/{print $1,$3,$4}' /tmp/pass 

3. awk的模式匹配:

1)空模式:也就是每一行都处理的模式

2)正则表达式

a. 匹配行

b. 匹配范围

3)表达式

注意:awk是不支持使用行号定址的

4. 基本操作:

1) 设定输入分隔符 -F

分隔符可以是字母. 数字. 符号和空白,可以同时指定多个分隔符,默认是空白

——单个字符做分隔符

——复合分隔符,多个字符组成的分隔符  比如:  :/

——同时指定多个分隔符  如:和/都是分隔符      # df -h |awk -F " +|%" '/\/$/{print $5}'

——每个字符都是一个字段    即以空为分隔符      # echo hello |awk -F "" '{print  $1,$2}'

2) awk输出:

(1) print —— 打印内容可以是文件中内容. 也可以和文件无关

    print要点:

         a. 各个输出字段之间用逗号分隔,而输出时默认以空白分隔

         b. print后面如果不指定字段,那么就会打印一整行

         c.print输出时默认是有换行符的

(2) printf —— 可以格式化输出,默认没有换行

    使用格式:  printf "format",item1,item2,... ...,itemn

   format的指示符都是以%开头的,后面跟一个字符表示不同的数据类型,如:

         %s:表示是字符串

         %d:表示十进制整数

          %f:表示浮点数,也就是小数

        %%:表示%本身

         %x:表示十六进制数

         %o:表示八进制数

        %c :表示字符

        修饰符:N(数字): 表示显示宽度        %5d

                         -:左对齐,默认是右对齐    %-5s

  printf要点:

      a. 与print不同的是,printf需要指定格式

      b. 格式(format)是用来指定后面的每个item的输出格式

      c. printf默认不会自动打印换行符,需要时候手动添加"\n"

      d. printf默认没有输出分隔符

3)awk的操作符:

(1)算数运算符

         -x:表示负数    +x(x):表示正数

          x+y  x-y  x*y  x/y  x%y      x**y  x^y (x的y次幂)

(2)关系运算符

     a. 数值之间的关系运算符 : >  <  >=  <=  ==  !=

     b. 字符串之间的关系运算符:

            ==  !=  ~  !~

            $1=="root"

            $1!="root"

            x ~ /y/  —— 匹配正则

             x !~ /y/  —— 不匹配正则

(3)逻辑运算符:  &&  ||  !

(4)赋值运算符(详见变量):

          =  +=  -=  *=  /=  %=  **=  ^=

         ++      --

5. awk的变量: 内置变量,自定义变量

1)内置变量

(1) $0  表示一整行的内容

(2) $1~$100

       $1:第一列

       $2:第二列

          ... ...

       $100:第100列

(3) 与记录相关的变量

       FS(Field Separator):字段分隔符,默认是空白

       RS(Record):记录分隔符,即行的分隔符

       OFS(Output):输出字段分隔符

       ORS:输出记录分隔符

(4) 与数据相关的变量

       NR:记录数,awk所处理的记录的总数    NR在很多情况下可以看成行号

       FNR:当前文件所处理的记录数

       NF:当前行的字段数

       $NF:当前行最后一个字段的值

       $(NF-1):当前行倒数第二个字段的值   

2)自定义变量

命名:由字母. 数字. 下划线组成,不能以数字开头,不要使用关键字,最好见名知意

            变量名区分大小写,变量可以先定义再使用,也可以直接使用(整型)

给变量赋值:

              变量名=数值

              变量名="字符串"    注意:此处一定有引号

6. 赋值运算

   a+=$2 等效于 a=a+$2

   a+=5  等效于  a=a+5

   a++  先赋值,再自增

   ++a  先自增,再赋值

7. awk的特殊模式

awk  [选项]  'BEGIN{动作}模式{动作}END{动作}'  文件列表

BEGIN{}  :在读取文件之前就执行,并且只执行一次

模式{}:       这一部分可能会执行多次

END{}:      在处理完文本之后执行,并且只执行一次

BEGIN:     一般用于初始化分隔符. 定义变量. 定义数组. 打印表头等

END:        汇总数据  比如:打印总成绩. 打印平均成绩等等1C}

说明:

BEGIN和END可以单独存在

1)只有BEGIN,后面不需要加文件

2)只有END  后面必须接文件,文件可以是空文件,也可以是有内容的文件

相关文章

  • 18-文本处理三剑客之awk

    本章内容 ◆ awk介绍◆ awk基本用法◆ awk变量◆ awk格式化◆ awk操作符◆ awk条件判断◆ aw...

  • 2017 09-04 AWK

    本章主要学习内容awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 awk条件判断 a...

  • 【技术案例】跟老男孩学运维-awk项目案例

    一个awk数组应用案例 [TOC] 0.技术点: awk awk数组 awk判断 awk数组赋值 awk函数spl...

  • awk

    awk:报告生成器,格式化文本输出 内容: awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 a...

  • awk

    Linux System Environment awk功能 awk格式 awk 参数 一、awk截取列 二、显示...

  • 笔记-awk

    1.Awk基础介绍 2.awk语法格式 2.Awk工作原理 3.Awk内部变量 4.Awk格式输出 5.Awk模式...

  • awk用法详解

    awk 用法 awk ' pattern {action} ' 1、awk '/101/' file ...

  • Day64-shell编程_正则表达式_awk

    1.Awk基础介绍 2.Awk工作原理 3.Awk内部变量 4.Awk格式输出 5.Awk模式匹配 5.1符号 ...

  • linux-awk

    linux-awk awk基本结构 awk ‘BEGIN{ print “start”} pattern { co...

  • awk小说

    awk awk脚本的结构基本如下: awk ' BEGIN{ print "start" } patern { c...

网友评论

    本文标题:awk

    本文链接:https://www.haomeiwen.com/subject/ccwpdqtx.html