文本数据处理之AWK 图解
一、awk简介 awk是一种优良的文本处理工具。它不仅是 linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。awk提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。最简单地说, awk 是一种用于处理文本的编程语言工具。 awk与grep,sed是处理文本数据必不可缺且必须熟练的处理工具。 grep: 文本过滤器 sed:流编辑器 awk: 报告生成器 二、awk的输出 awk其输出格式有两种:print和printf print是简单的显示命令,printf 是格式化显示命令 1、print的使用格式 printitem1,item2,... ①各项目之间使用逗号隔开,而输出时则以空白字符分隔; ②输出的item可以为字符串或数值、当前记录的字段(如$1)、变量或awk的表达式;数值会先转换为字符串,而后再输出; ③ print命令后面的item可以省略,此时其功能相当于print $0,因此,如果想输出空白行,则需要使用print""; 2、printf的使用格式 printfformat,item1,... ①其与print命令的最大不同是,printf需要指定format; ② format用于指定后面的每个item的输出格式; 每一个格式对应一个字段 ③ printf不会自动打印换行符;n 3、format format格式的指示符都以%开头,后跟一个字符; ① %c: 显示字符的ASCII码; ② %d,%i:十进制整数; ③ %e,%E:科学计数法显示数值; ④ %f: 显示浮点数; ⑤ %g,%G: 以科学计数法的格式或浮点数的格式显示数值; ⑥ %s: 显示字符串; ⑦ %u: 无符号整数; ⑧ %%: 显示%自身; 4、修饰符 ① N: 显示宽度; ② -: 左对齐; ③ +:显示数值符号,默认为右对齐; 三、awk的变量 1、awk内置变量之记录变量: FS: field separator,读取文件本时,所使用字段分隔符; RS: Record separator,输入文本信息所使用的换行符; OFS: Output Filed Separator,文件分隔符; ORS:Output Row Separator,行分隔符; 2、awk内置变量之数据变量: NR:The number of input records,awk命令所处理的记录数;如果有多个文件,这个数目会把处理的多个文件中行统一计数; NF:Number of Field,当前记录的field个数; FNR:与NR不同的是,FNR用于记录正处理的行是当前这一文件中被总共处理的行数; ARGV:数组,保存命令行本身这个字符串,如awk'{print $0}' a.txt b.txt这个命令中,?? ? ? ? ARGV[0]保存awk,ARGV[1]保存a.txt; ARGC:awk命令的参数的个数; FILENAME:awk命令所处理的文件的名称; ENVIRON:当前shell环境变量及其值的关联数组; 3、用户自定义变量 gawk允许用户自定义自己的变量以便在程序代码中使用,变量名命名规则与大多数编程语言相同,只能使用字母、数字和下划线,且不能以数字开头。gawk变量名称区分字符大小写。 ①脚本中赋值变量 在gawk中给变量赋值使用赋值语句进行 ②命令行中使用赋值变量 gawk命令也可以在“脚本”外为变量赋值,并在脚本中进行引用 四、输出重定向 1、?print items > output-file print items >> output-file print items | command 2、特殊文件描述符: /dev/stdin:标准输入 /dev/sdtout: 标准输出 /dev/stderr: 错误输出 /dev/fd/N: 某特定文件描述符 ? 五、awk的操作符 1、算术操作符: ? -x: 负值 +x: 转换为数值; x^y: 次方 x**y: 次方 x*y: 乘法 x/y:除法 x+y: 加法 x-y: 减法 x%y: 取余 2、字符串操作符: 只有一个,而且不用写出来,用于实现字符串连接; 3、赋值操作符: =、?+=、-=、*=、/=、%=、^=、**=、++、-- 注:如果某模式为=号,此时使用/=/可能会有语法错误,应以/[=]/替代; 4、布尔值 awk中,任何非0值或非空字符串都为真,反之就为假,与bash完全相反。 5、比较操作符 x < y 小于 x <= y 小于或等于 x > y 大于 x >= y 大于或等于
x == y 等于 x != y 不等于 x ~ y 被匹配的字符 x !~ y 不被匹配的字符
6、表达式间的逻辑关系符 && 与 | | 或
7、条件表达式 selector?if-true-exp:if-false-exp ?
? 8、函数调用 function_name (para1,para2) 多个参数用逗号隔开 六、awk的输出模式 1、awk 'program' input-file1 input-file2 ... 其中的program为: pattern { action } pattern { action } ...... ? 2、常见的模式类型: Regexp: 正则表达式,格式为/regular expression/ expresssion: 关系表达式,其值非0或为非空字符时满足条件,可以是字符串或数字的比较 Ranges: 指定的匹配范围,格式为pat1,pat2 BEGIN/END:特殊模式,仅在awk命令执行前运行一次或结束前运行一次 BEGIN模式是 在真正处理之前做些准备工作的功能,END模式是 在运行之后输出相关信息。
Empty(空模式):匹配任意输入行; 3、常见的语句动作 ? Expressions : 表达式 Control statements: 控制语句 Compound statements : 组合语句 Input statements : 输入语句 Output statements : 输出语句 七、控制语句 1、if-else 语法:if (condition){then-body} else {[ else-body ]} ?
2、while 此while语句在awk中的作用体现是要么做成的循环体,要么在某个片上的循环 语法: while(condition){statement1; statment2; ...} ?
3、do-while 与while语句不同之处在:不管条件真假先执行一次循环体,再执行控制语句 语法: do {statement1,statement2,...} while (condition) ?
4、for 语法: for ( variableassignment; condition; iteration process) { statement1,...} ?
for循环还可以用来遍历数组元素 语法: for (i in array) {statement1,...} ?
? 5、case 语法:switch (expression) {case VALUE or /REGEXP/: statement1,... default: statement1,...} ? 6、break 和 continue 常用于循环或case语句中 7、 next 提前结束对本行文本的处理,并接着处理下一行 ?
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |