马哥博客作业第八周 文本处理三剑客(AWK)

VIM

文本处理三剑客之 awk
 

awk 工作原理和基本用法说明:
          awk:Aho, Weinberger, Kernighan,报告生成器,格式化文本输出,GNU/Linux发布的AWK目前由自
由软件基金会(FSF)进行开发和维护,通常也称它为 GNU AWK

有多种版本:
     AWK:原先来源于 AT & T 实验室的的AWK
     NAWK:New awk,AT & T 实验室的AWK的升级版
     GAWK:即GNU AWK。所有的GNU/Linux发布版都自带GAWK,它与AWK和NAWK完全兼容

gawk:模式扫描和处理语言,可以实现下面功能:
1  文本处理
2  输出格式化的文本报表
3  执行算数运算
4  执行字符串操作

格式:
   awk [options]   'program' var=value   file…
   awk [options]   -f programfile   var=value file…

说明:
           program通常是被放在单引号中,并可以由三种部分组成

1  BEGIN语句块
2  模式匹配的通用语句块
3  END语句块

常见选项:
    -F “分隔符” 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符
    -v var=value 变量赋值

Program格式:
    pattern{action statements;..}

pattern:决定动作语句何时触发及触发事件,比如:BEGIN,END,正则表达式等
action statements:对数据进行处理,放在{}内指明,常见:print, printf
 

awk 工作过程:

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

分割符、域和记录:
1    由分隔符分隔的字段(列column,域fifield)标记$1,$2...$n称为域标识,$0为所有域,注意:和shell中变量$符含义不同
2    文件的每一行称为记录record
3    如果省略action,则默认执行 print $0 的操作

常用的action分类:
      output statements:print,printf
      Expressions:算术,比较表达式等
      Compound statements:组合语句
      Control statements:if, while等
      input statements

awk控制语句:
     { statements;… } 组合语句
     if(condition) {statements;…}
     if(condition) {statements;…} else {statements;…}
     while(conditon) {statments;…}
     do {statements;…} while(condition)
     for(expr1;expr2;expr3) {statements;…}
     break
     continue
     exit
 

动作 print:
格式:
       print item1, item2, ...

说明:
    逗号分隔符
    输出item可以字符串,也可是数值;当前记录的字段、变量或awk的表达式
    如省略item,相当于print $0
    固定字符符需要用“ ” 引起来,而变量和数字不需要

awk变量:
awk中的变量分为:内置和自定义变量

常见的内置变量:
         FS:输入字段分隔符,默认为空白字符,功能相当于 -F

         OFS:输出字段分隔符,默认为空白字符

         RS:输入记录record分隔符,指定输入时的换行符

         ORS:输出记录分隔符,输出时用指定符号代替换行符

         NF:字段数量

         NR:记录的编号

         FNR:各文件分别计数,记录的编号

         FILENAME:当前文件名

         ARGC:命令行参数的个数

         ARGV:数组,保存的是命令行所给定的各参数,每一个参数:ARGV[0],......
 

自定义变量(区分字符大小写):
       -v var=value
       在program中直接定义
 

猜你喜欢

转载自www.cnblogs.com/daiyuchun/p/12902584.html