1、AWK命令格式:
- awk 'pattern' file
- awk '{actions}' file
- awk 'pattern {action}' file
其中,pattern由两个正斜杠之间的正则表达、一个或多个awk操作符组成的表达式组成。比如pattern可以使'/Tom/ && $2 > 10'之类的。
2、模式范围
使用两个模式时,先匹配从第一个模式的首次出现到第二个模式的首次出现之间的内容,然后在匹配第一个模式的下一次出现到第二个模式的下一次出现。
3、变量
只要在AWK中被提到,变量就开始存在。变量可以使字符串又是数字,变量被设置后就变成与等号右边的表达式相同的类型。变量初始化以后,变量值为0货值是“”。
将字符串强制转换为数字:name + 0;将数字转换为字符串:number + “”。
所有由split函数创建的字段或数组元素都被视为字符串,除非他们只包含数字值。如果某个字段或数组元素为空,他们的值就是空串。
4、BEGIN模式
BEGIN模式后面跟一个操作块,AWK在对文件进行任何处理前执行BEGIN操作块。一般常在BEGIN中进行变量设置,或者是打印输出。
5、END模式
END模式在完成于文件相关的操作以后执行。
6、重定向及管道
6.1输出重定向
输出重定向时,使用>操作符会清空打开的文件,然后保持打开状态直至显示关闭文件或者AWK程序结束,此后的内容追加到文件尾部。
6.2管道
如果awk程序打开了管道,就必须先关闭它才能打开另一个管道,管道符右边的命令在双引号之间,每次只能打开一个管道。
awk '{print $1,$2 | " sort -r +1 -2 +0 -1 "}' name
关闭文件和管道:如果打算再次在awk中使用某个文件或管道进行读写,需要先关闭程序。
awk '{print $1,$2 | " sort -r +1 -2 +0 -1 "}' name
END{close (" sort -r +1 -2 +0 -1 ")}
双引号中的字符串必须与最初打开管道的pipe命令字符串完全一致。
7、if语句
格式:
if(表达式){
语句;语句
}
if(表达式){
语句;
}
else{
语句;
}
if(表达式){
语句;
}
else if(表达式){
语句;
}
8、循环
awk '{i = 0;while (i <= NF){print i,$i;i++}}' filename
awk '{for(i = 1;i <=NF ;i++){print NF,$i}}' filename
9、next,exit
next语句从输入文件中去除下一行,然后从awk脚本的顶部重新开始执行。
exit语句终止awk程序,它只能中断对记录的处理,不能跳过END语句。
10、split函数
split函数用于将字符串拆分为词,保存在数组中。
split(字符串,数组,分隔符)
split(字符串,数组)
11、命令行参数
可以从ARGV中得到命令行参数,ARGV下标从0开始,包括命令awk。所有传递给awk的参数不包括在内。ARGC是命令行参数的数目。
12、AWK内置函数
(1)sub和gsub:sub函数用于在记录中查找能够匹配正则表达式的最长且最靠左的子串,然后用替换串替代找到的子串。如果没有指定目标串就在整个记录中查找。
sub(正则表达式,替换串)
sub(正则表达式,替换串、目标串)
gsub进行全局替换,sub只进行第一次替换。
(2)index(字符串,子串):返回子串在字符串中的第一次出现的位置,偏移量从1开始计算,没有出现返回0
(3)length(字符串):返回字符串包含的字符个数
(4)sunstr:返回从字符串制定位置开始的子串,如果制定了子串的长度,返回字符串的相应部分,如果指定的长度超出字符串,则返回实际内容。
substr(字符串,起始位置)
substr(字符串,起始位置,长度)
(5)match(字符串,正则表达式):返回正则表达式在字符串中出现的位置。
(6)随机数发生器rand:生成一个大于等于0、小于1的伪随机浮点数
(7)内置算术函数:包括各种常用的算术函数