文本数据处理之AWK 图解
2013-09-06 15:52
204 查看
一、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, item2, ...
①其与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, statement2, ...}
for循环还可以用来遍历数组元素
语法: for (i in array) {statement1,statement2, ...}
5、case
语法:switch (expression) {case VALUE or /REGEXP/: statement1, statement2,... default: statement1, ...}
6、break
和 continue
常用于循环或case语句中
7、 next
提前结束对本行文本的处理,并接着处理下一行
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, item2, ...
①其与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
1 2 3 4 5 | if selector; then if-true-exp else if-false-exp fi |
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 ]}
1 | # awk -F: '{if ($1=="root") printf "%-15s: %s\n", $1,"Admin"; else printf "%-15s: %s\n", $1, "Common User"}' /etc/passwd |
2、while
此while语句在awk中的作用体现是要么做成的循环体,要么在某个片上的循环
语法: while(condition){statement1; statment2; ...}
1 | # awk -F: '{i=1;while (i<=3) {print $i;i++}}' /etc/passwd |
3、do-while
与while语句不同之处在:不管条件真假先执行一次循环体,再执行控制语句
语法: do {statement1, statement2,...} while (condition)
1 | # awk -F: '{i=1;do {print $i;i++}while(i<=3)}' /etc/passwd |
4、for
语法: for ( variableassignment; condition; iteration process) { statement1, statement2, ...}
1 | # awk -F: '{for(i=1;i<=NF;i++) { if (length($i)>=4) {print $i}}}' /etc/passwd |
for循环还可以用来遍历数组元素
语法: for (i in array) {statement1,statement2, ...}
1 | # awk -F: '$NF!~/^$/{BASH[$NF]++}END{for(A in BASH){printf "%15s:%i\n",A,BASH[A]}}' /etc/passwd |
5、case
语法:switch (expression) {case VALUE or /REGEXP/: statement1, statement2,... default: statement1, ...}
6、break
和 continue
常用于循环或case语句中
7、 next
提前结束对本行文本的处理,并接着处理下一行
相关文章推荐
- 文本数据处理之awk
- awk命令_Linux awk 命令用法详解:文本和数据进行处理的编程语言
- Linux awk --对文本和数据进行处理
- 对文本和数据进行处理之awk编程
- 2.shell中的文本处理:grep、awk与sed
- Linux-在文本最后一行最后一列处理数据
- awk文本处理知识汇总
- 用python对文本格式的数据进行统计处理
- 类似AWK的文本处理
- Linux文本处理—awk gawk命令的使用
- awk文本处理总结(入门,中级,高级)
- linux-awk【行扫描文本:样式扫描与处理工具】
- php中处理大文本数据字符统计
- awk文本处理总结(入门,中级,高级)
- awk处理之案例三:awk去掉不需要的文本行
- python --网页爬虫,文本处理,科学计算,机器学习,数据挖掘资料+附带工具包下载
- pyspark+nltk处理文本数据
- 机器学习(九)使用sklearn库进行数据分析_——文本特征处理
- awk文本处理实战
- Java中使用正则表达式处理文本数据