AWK 是一个强大的文本处理工具,它已经不单单是一个简单的命令,它更像是一门微型的语言。
基本语法
awk [params] 'script' file
awk [params] -f script_file file
-F # 指定分隔符,可以使用多个分隔符分割 -F '[ ,]' 先用空格分割在用逗号分割
-v var=val # 设置变量值
内建变量
变量 |
释义 |
$n |
第 n 个字段,由 FS 分割,n 为 0 时表示完整一条记录 |
ARGC |
命令参数个数 |
FS |
字段分隔符 |
OFS |
输出字段分隔符,默认空格 |
NF |
一条记录的字段数 |
NR |
当前记录的行号,如果有多个文件,计数不会因文件变更而重置 |
FNR |
针对多个文件分别计数,计数会因文件变更而重置 |
RS |
记录的分隔符,默认是换行符 |
ORS |
输出记录的分隔符,默认是换行符 |
FILENAME |
文件名 |
IGNORECASE |
如果为真,则忽略大小写 |
操作符
操作符 |
释义 |
+ - * / % |
常规运算 |
^ |
幂运算 |
&& || ! |
常规逻辑符号 |
~ !~ |
正则匹配或不匹配 |
> < = != |
关系运算符 |
内建函数
函数名称 |
释义 |
数学函数 |
|
cos( x )、sin( x ) |
正余弦 |
exp( x ) |
幂函数 |
log( x ) |
对数函数 |
sqrt( x ) |
开方 |
int( x ) |
类型转换 |
rand() |
0-1之间的随机数 |
srand ( [x] ) |
针对随机种子返回随机数 |
字符串函数 |
|
sub(regex,sub,s) |
字符串替换 |
substr(s, start, l) |
字符串截取 |
index( s1, s2 ) |
s2在s1 中的位置,从 1 开始 |
length(s) |
字符串长度 |
match( s, Ere ) |
通过正则表达式查找所在字符串 s 中的位置 |
split( s, A, [Ere] ) |
分割字符为数组 A |
toupper|tolower |
转大写|小写 |
sprintf(format, Expr, Expr, . . . ) |
字符串格式化 |
strtonum |
字符串转数字,0x 开头的字符串将以 16 进制进行转换 |
时间函数 |
|
mktime( YYYY MM DD HH MM SS[ DST]) |
|
strftime([format [, timestamp]]) |
|
systime() |
获取系统时间 |
脚本编程
# demo.awk
BEGIN{
# 初始化操作,还未遍历文件内容
}
{
# 遍历文件内容
}
END{
# 遍历文件介绍后操作
}