文本处理工具之awk

栏目: 服务器 · 发布时间: 7年前

内容简介:文本处理工具之awk

文本处理 工具 AWK

一、 linux 文本处理工具三剑客: grep sed awk 。其中 grep 是一种文本过滤器, sed 是文本行编辑器,而 awk 是一种报表生成器,就是对文件进行格式化处理的,这里的格式化不是文件系统的格式化,而是对文件内容进行各种“排版”,进而格式化显示。

linux上我们使用的是GNU awk 简称 gawk,并且gawk是awk的链接文件,因此在系统上使用gawk和awk效果一样

二、 awk的工作原理

awk在处理文本时也是一次读取一行文本,然后根据输入分隔符( 默认分隔符为空格符 )进行切片,切成 n个片,然后将每一片都富裕awk内部的一个变量当中来进行保存,这些变量名为$1,$2,$3,…,$n。awk就可以对这些切片进行单独处理,比如显示某一段,还可以对某些短进行额外的加工处理,比如计数、运算等。

三、 awk的基本用法

   1、   awk [options] ‘program’ var=value file…         awk [options] -f programfile var=value file…         awk [options] ‘BEGIN{ action;… } pattern{ action;… } END{action;… }’ file …    2、 awk 程序通常由: BEGIN 语句块、能够使用模式匹配的通用语句块、 END 语句块,共 部分组成    3、 program :编程语言, 通常是被单引号或双引号中  

   1)   program:pattern{action statements;..}  

2) pattern :模式 部分决定动作语句何时触发及触发事件  

3) action statements对数据进行处理,放在{}内指明  

4、选项

-F :指明输入字段分隔符(默认分隔符为空格符)

-v :变量赋值

-f :读取awk脚本并执行

四、 pattern 根据 pattern条件,过滤匹配的行,再做处理     (1)如果未指定:空模式,匹配每一行     (2)/regular expression/:仅处理能够模式匹配到的行,需要用/ /括起来     3) relational expression: 关系表达式,结果为“真”才会被处理          真:结果为非 0值,非空字符串          假:结果为空字符串或 0值  

4)#,# :行范围,类似sed或vim中的地址界定

5)BEGIN 、END:两种特殊的模式

BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中  

  END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块

文本处理工具之awk

五、 变量:内置和自定义变量

1、内置变量       FS:输入字段分隔符,默认为空白字符       OFS:输出字段分隔符,默认为空白字符       RS:输入记录分隔符,指定输入时的换行符,原换行符仍有效      ORS:输出记录分隔符,输出时用指定符号代替换行符      NF:字段数量       NR:行号

FNR:各文件分别计数,行号       FILENAME:当前文件名       ARGC:命令行参数的个数       ARGV:数组,保存的是命令行所给定的各参数

2、 自定义变量

(1) -v var=value     (2) 在program中直接定义

示例:

文本处理工具之awk

六、 awk的输出命令

1、print

用法: print item1,item2 …

   (1) 逗号分隔符

(2) 输出的各item可以字符串,也可以是数值;当前记录的字段、变量或awk的表达式

(3) 如省略item,相当于print $0   ,用于输出整行

(4) 打印字符串时,要用引号引用

5)打印变量时候,可以使用变量名直接引用

示例:

文本处理工具之awk

2、printf格式化输出

格式化输出: printf “ FORMAT” , item1, item2, …         (1) 必须指定FORMAT         (2) 不会自动换行,需要显式给出换行控制符, \n         (3) FORMAT中需要分别为后面每个item指定格式符         4) 格式符:与 item一一对应             %c: 显示字符的ASCII码             %d, %i: 显示十进制整数             %e, %E:显示科学计数法数值             %f:显示为浮点数             %g, %G:以科学计数法或浮点形式显示数值             %s:显示字符串             %u:无符号整数             %%: 显示%自身          5) 修饰符:            #[.#]:第一个数字控制显示的宽度;第二个#表示小数点后精度

-: 左对齐(默认右对齐)          

+:显示数值的正负符号

示例:

文本处理工具之awk

七、 操作符

1、 算术操作符:         x+y, x-y, x*y, x/y, x^y, x%y         -x: 转换为负数         +x: 转换为数值   2、 字符串操作符:没有符号的操作符,字符串连接   3、   赋值操作符:          =, +=, -=, *=, /=, %=, ^= ++, —   4、 比较操作符: ==, !=, >, >=, <, <=   5、 模式匹配符: ~:左边是否和右边匹配包含 !~:是否不匹配

6、 逻辑操作符: &&,或||,非!   7、 函数调用: function_name(argu1, argu2, …)   8、 条件表达式(三目表达式):         selector?if-true-expression:if-false-expression

示例:

文本处理工具之awk

八、控制语句  

1、if-else语句           

语法: if(condition){statement;…}[else statement] if(condition1){statement1}els e if(condition2){statment2}else{statement3}

示例:

文本处理工具之awk

2、 while 语句

语法: while(condition){statement;…}     条件 “真”,进入循环;条件“假”, 退出循环

示例:

文本处理工具之awk

3、for 语句

语法: for(expr1;expr2;expr3) {statement;…}      常见用法:             for(variable assignment;condition;iteration process){for-body}       特殊用法:能够遍历数组中的元素;             for(var in array) {for-body}

示例:统计当前系统上所有tcp连接的各种状态的个数

文本处理工具之awk

4、 do-while循环      语法: do {statement;…}while(condition)       意义:无论真假,至少执行一次循环体

示例:计算1到100的和

文本处理工具之awk

5、 switch语句      语法: switch(expression) {case VALUE1 or /REGEXP/:statement1; case VALUE2 or /REGEXP2/: statement2;…; default: statementn}    

6、 break和continue

示例:

文本处理工具之awk

7、next

       提前结束对本行处理而直接进入下一行处理

示例:利用next打印奇数行

文本处理工具之awk

九、 数组

关联数组: array[index-expression]   (1) 可使用任意字符串;字符串要使用双引号括起来   (2) 如果某数组元素事先不存在,在引用时, awk会自动创建此元素,并将其值初始化为“空串”

(3) 若要判断数组中是否存在某元素,要使用 “index in array”格式进行遍历

若要遍历数组中的每个元素,要使用 for循环          for(var in array) {for-body}     注意: var会遍历array的每个索引

示例:统计访问httpd服务的每个客户的次数

文本处理工具之awk

十、 函数

1、内建函数

rand():返回0和1之间一个随机数     length([s]):返回指定字符串的长度     sub(r,s,[t]):对t字符串进行搜索r表示的模式匹配的内容,并将第一个匹配的内容替换为s     gsub(r,s,[t]):对t字符串进行搜索r表示的模式匹配的内容,并全部替换为s所表示的内容

split(s,array,[r]):以r为分隔符, 切割字符串s,并将切割后的结果保存至array所表示的数组中,第一个索引值为1,第二个索引值为2,…    2、 自定义函数     格式:         function name ( parameter, parameter, … ) {statement e return expression }  

十一、 awk中调用 shell 命令

system命令     空格是 awk中的字符串连接符,如果system中需要使用awk中的变量可以使用空格分隔,或者说除了awk的变量外其他一律用””引用起来。

十二、几个awk练习

1、利用awk打印九九乘法表

文本处理工具之awk

2、提取字符串“hy3yg4gyh6jh@$$6jhj7mkkjn+24hij” 中的数字

文本处理工具之awk


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Haskell

Haskell

Simon Thompson / Addison-Wesley / 1999-3-16 / GBP 40.99

The second edition of Haskell: The Craft of Functional Programming is essential reading for beginners to functional programming and newcomers to the Haskell programming language. The emphasis is on th......一起来看看 《Haskell》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具