[toc]
awk函数
awk内置函数
字符串处理函数
| 函数 | 作用 | 
|---|---|
length(s) | 返回字符串 s 的长度 | 
index(s, sub) | 返回 sub 在 s 中的起始位置(找不到返回 0) | 
substr(s, start, len) | 返回 s 中从 start 开始、长度为 len 的子串 | 
split(s, arr, sep) | 按 sep 分割字符串 s,存入数组 arr,返回数组长度 | 
match(s, regex) | 返回 regex 在 s 中的起始位置,并设置 RSTART 和 RLENGTH | 
sub(regex, repl, s) | 用 repl 替换 s 中第一个匹配 regex 的部分 | 
gsub(regex, repl, s) | 用 repl 替换 s 中所有匹配 regex 的部分 | 
length
作用
- 返回字符串 
s的长度 
语法
length(s)
示例
awk 'BEGIN{
	s = "hello world"
	print length(s) # 输出 11
}'
index
作用
- 返回 
sub在s中的起始位置(找不到返回0) 
语法
index(s, sub)
示例
awk 'BEGIN{
	s = "hello world"
	print index(s, "world") # 输出 7 
}'
substr
作用
- 返回 
s中从start开始、长度为len的子串 
语法
说明
substr(某一列,从第几个字符开始,截取几个字符结束)
substr(s, start, len)
示例
awk 'BEGIN{
	s = "hello world"
	print substr(s, 7, 5) # 输出 world 
}'
split
作用
- 按 
sep分割字符串s,存入数组arr,返回数组长度 
语法
split(s, arr, sep)
示例
说明
在 awk 中,数组下标从1开始
awk 'BEGIN{
	s = "hello world"
	split("a,b,c", arr, ",")
	print arr[2] # 输出 b
}'
match
作用
说明
- 
RSTART:表示匹配 在字符串中的起始位置(从 1 开始) - 
RLENGTH:表示匹配的 长度(匹配失败时为-1) 
- 返回 
regex在s中的起始位置,并设置RSTART和RLENGTH 
语法
match(s, regex)
示例
awk 'BEGIN {
    str = "hello world"
    pos = match(str, "world")
    print pos      # 输出 7("world" 从第 7 个字符开始)
    print RSTART   # 同上,输出 7
    print RLENGTH  # 输出 5("world" 的长度)
}'
sub
作用
- 用 
repl替换s中第一个匹配regex的部分 
语法
sub(regex, repl, s)
示例
awk 'BEGIN{
	s = "abc123def"
	sub(/[0-9]+/, "X", s)
	print s # 输出 abcXdef
}'
gsub
作用
- 用 
repl替换s中所有匹配regex的部分 
语法
说明
gsub(/要替换的内容/,'替换后的内容',替换哪一列)
gsub(regex, repl, s)
示例
将 /etc/passwd 文件中root一行中的冒号替换为加号
$ awk '$1~/^root/{gsub(/:/,"+",$NF);print $0}' /etc/passwd
root+x+0+0+root+/root+/bin/bash
数学函数
| 函数 | 作用 | 
|---|---|
int(x) | 取整(向零取整) | 
rand() | 返回 [0,1) 之间的随机数 | 
srand(seed) | 设置 rand() 的种子 | 
sin(x) / cos(x) | 正弦 / 余弦 | 
sqrt(x) | 平方根 | 
exp(x) | 指数函数 | 
log(x) | 自然对数 | 
atan2(y, x) | 反正切(返回 y/x 的角度) | 
时间函数
| 函数 | 作用 | 
|---|---|
systime() | 返回当前时间的 UNIX 时间戳 | 
strftime(format, timestamp) | 按 format 格式化 timestamp,不传 timestamp 则默认当前时间 | 
systime
作用
- 返回当前时间的 UNIX 时间戳
 
语法
systime()
示例
awk 'BEGIN{
	print systime() # 输出 1743676708
}'
strftime
作用
- 按 
format格式化timestamp,不传timestamp则默认当前时间 
语法
strftime(format, timestamp)
示例
awk 'BEGIN{
	print strftime("%Y-%m-%d %H:%M:%S") # 输出 2025-04-03 18:38:17
}'
进程控制函数
system
作用
- 调用shell命令,将输出直接打印到终端,返回退出状态
 
语法
system(cmd)
示例
awk 'BEGIN{system("pwd")}'
close
作用
- 关闭 
cmd管道,释放资源 
语法
close(cmd)
示例
awk 'BEGIN {
    "ls -1" | getline file
    print "First file:", file
    close("ls -1")  # 关闭管道
}'
awk自定义函数
语法
function 函数名(参数1, 参数2, ...[, 本地变量]) {
    语句
    return 返回值
}
编辑awk文件 function.awk
cat > function.awk <<EOF
#!/usr/bin/awk
function sum(num1,num2)
{
  s=num1+num2;
  print s;
}
BEGIN{
  sum(1,2)
}
EOF
运行
$ awk -f function.awk 
3

