[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