awk编程手册
2.1 awk语法
awk [options] 'script' var = value file(s)
pattern {action} 如awk '/root/' test 或 awk '$3 < 100' test
如果没有模式则action将应用到全部的记录,默认情况下是每一个输入行都是一条记录但用户可以通过RS变量指定不同的分隔符进行分隔。
3.1 什么是模式?
/正则表达式/: 可以使用通配符的扩展集
关系表达式:可以用关系运算符进行操作
模式匹配表达式:用运算符~[匹配]和~![不匹配]
模式:指定一个行的范围不能包括BEGIN和END
BEGIN:让用户指定在第一条输入记录被处理之前所发生的动作这里面可以设置全局变量
END:让用户在最后一条输入记录被读取之后发生的动作
3.2 操作
操作由一人或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内主要有四部分:
1、变量或数组赋值
2、输出命令
3、内置函数
4、控制流命令
<、<=、==、!=、>=、~匹配正则表达式、!~不匹配正则表达式。与或的写法&&,||
看一些实例吧:
控制流语句
{ if ($expression) {
statement; statement; ...
}
}
awk '{if $1 < $2} print $2 " too high"}' test 含义就是第一个域小于第二个域则打印
if/else语句用于双重判断
{if (expression) {
statement;statement;....
} else {
statement;statement; ....
}
}
比如:awk '{if ($1 > 100) print $1 "bad"; else print "ok"}' test
还支持循环语句
while,for,special for循环
$awk '{i = 1; while ( i <= NF ) { print NF,$i; i++}}' test
还支持breakcountiue这样的语句
next语句从输入文件中读取一行然后从头开始执行awk脚本如:
{
if ($1 ~/test/) {next}
else {print}
}
exit 语句用于结束awk程序,但不会略过END快./退出状态为0代表成功非零代表出错
14.7 数组
awk中的数组下标可以是数字与字母类似于PHP里面的关联数组了
14.8 支持内建函数
1. 字符串函数
比如
sub (regular expression, substitution string):
index函数
length函数
substr函数
match函数
toupper与tolower函数
实例:
$ awk '{ print toupper("test"), tolower("TEST") }'
split()
时间函数
systime函数
strftime函数调用了C库中的strftime格式化时间如: systime( [format
specification][,timestamp] )
内建数学函数
atan2(x,y)
cos(x)
int(x)
rand()
自定义函数
function name(parameter,parameter,parameter,....) {
statements
return expression
}
看几个例子:
1、将一行竖排转换成横行数据?
awk '{printf("%s",$1)}' filename
2、如下的数据如何提取第一、三列?
more a
x,170,offline,ddd
Om4,11.185,_offline,e
O4.cm4,184,434_offline,rt
awk -F , '{print $1,$3}' a
3、经典用法
$ awk -F":" '{print $1 $3}' filename
字段分隔符可以很复杂比如
$ awk -F "foo[0-9][0-9]" '{print $1 $3}' filename
阅读(642) | 评论(0) | 转发(0) |