AWK名字来源于三位创造者Aho、Weinberger和Kernighan统称。
AWK擅长处理文本数据。
命令行方式
awk '{}' file
文件方式
<awkfile>.awk
#! /bin/awk -f
BEGIN{}
{}
END{}
$ awk <awkfile.awk> awk
AWK参数
-F 指定域分隔符,例如:-F "|",即以|作为域分隔符,默认分隔符为一个或多个空格或TAB,即"[[:space:]][[:space:]]*"。
-v 定义变量,从shell给awk传递变量,如-vDATE=$DATE,即将shell中$DATE变量值传递给awk变量DATE。
-f 指定脚本文件,例如-f progfile。
AWK内置变量
FS 域分隔符NF 域个数
NR 行数
FNR 同上
FILENAME 处理的文件名,当输入为管道时,FILENAME为空。
RS 行分隔符
OFS 输出域分隔符
ORS 输出行分隔符
OFMT 数字输出格式
CONVFMT 数字内部转换格式
SUBSEP 多维数组索引分隔符
ARGC 输入参数个数
ARGV 输入参数数组
ENVIRON 环境变量数组
RSTART match()函数正则匹配到字符串开始位置
RLENGTH match()函数正则匹配到字符串的长度
$0 所有的输入参数
$1,$2,$3,$4 第几个输入参数
AWK内置函数
blength[([s])] 计算字符串长度(byte为单位)length[([s])] 计算字符串长度(character为单位)
rand() 生成随机数
srand([expr]) 设置rand() seed
int(x) 字符串转换为整型
substr(s, m [, n]) 取子字符串
index(s, t) 在字符串s中定位t字符串首次出现的位置
match(s, ere) 在字符串s中匹配正则ere,match修改RSTART、RLENGTH变量。
split(s, a[, fs]) 将字符串分割到数组中
sub(ere, repl [, in]) 字符串替换
gsub 同上
sprintf(fmt, expr, ...) 拼字符串
system(cmd) 在shell中执行cmd (貌似直接用""括起来,就可以使用)
toupper(s) 字符串转换为大写
tolower(s) 字符串转换为小写
AWK流程控制
if(expression) statement [ else statement ]
while(expression) statement
for(expression;expression;expression) statement
for(var in array) statement
do statement while(expression)
break
continue
{[statement ...]}
expression # commonly var = expression
print [expression-list] [ > expression]
printf format [, expression-list] [ > expression]
return [expression]
next # skip remaining patterns on this input line.
delete array [expression] # delete an array element.
AWK中数组有两种用法普通数组和HASH数组,此处为HASH数组。
多维数组例子,可将多个字段作为分组列,AWK使用一维数组模拟多维数组,使用\034作为分隔符
exit [expression] # exit immediately; status is expression.