Linux 命令之 AWK

目录

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{
	# 遍历文件介绍后操作
}