跳到主要内容

[toc]

awk函数

awk内置函数

字符串处理函数

函数作用
length(s)返回字符串 s 的长度
index(s, sub)返回 subs 中的起始位置(找不到返回 0
substr(s, start, len)返回 s 中从 start 开始、长度为 len 的子串
split(s, arr, sep)sep 分割字符串 s,存入数组 arr,返回数组长度
match(s, regex)返回 regexs 中的起始位置,并设置 RSTARTRLENGTH
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

作用

  • 返回 subs 中的起始位置(找不到返回 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

  • 返回 regexs 中的起始位置,并设置 RSTARTRLENGTH

语法

  • 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)指数函数 exe^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
Right Bottom Gif
Right Top GIF