AWK 常见内置函数分类
在 AWK(特别是 GNU AWK,即 gawk)中,内置函数是处理文本、数学运算、时间操作、字符串匹配等任务的重要工具。掌握这些函数可以极大提升你在日志分析、系统监控、自动化运维等方面的能力。
🧠 AWK 常见内置函数分类
| 类型 | 函数名 | 用途 |
|---|---|---|
| 字符串处理 | length(), substr(), index(), match(), split() |
字符串长度、截取、查找、正则匹配、分割 |
| 数学运算 | int(), sqrt(), rand(), srand(), log(), exp() |
取整、平方根、随机数、对数、指数 |
| 时间处理 | systime(), strftime() |
获取当前时间戳、格式化输出时间 |
| 输入输出 | getline, system() |
读取下一行、调用外部命令 |
| 数组与控制 | asort(), asorti() |
数组排序(gawk 扩展) |
📚 内置函数详解(附示例)
1️⃣ 字符串处理函数
✅ length([str])
返回字符串长度,不传参数时默认统计 $0
echo "hello world" | awk '{print length(), length($1)}'
输出:
11 5
✅ substr(str, start, [length])
从指定位置开始截取子字符串
awk 'BEGIN{print substr("Linux is awesome", 8, 2)}'
输出:
is
✅ index(str, find)
查找子字符串首次出现的位置(无则返回 0)
awk 'BEGIN{print index("Ubuntu", "bu")}'
输出:
2
✅ match(str, regex)
匹配正则表达式,设置 RSTART 和 RLENGTH
awk 'BEGIN{
str = "访问IP: 192.168.1.100";
if (match(str, /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/))
print substr(str, RSTART, RLENGTH)
}'
输出:
192.168.1.100
✅ split(str, array, separator)
将字符串按分隔符拆分为数组
awk 'BEGIN{
str = "apple,banana,orange";
n = split(str, arr, ",");
for(i=1; i<=n; i++) print arr[i]
}'
输出:
apple
banana
orange
2️⃣ 数学运算函数
✅ int(x):取整
awk 'BEGIN{print int(3.1415)}'
输出:
3
✅ sqrt(x):平方根
awk 'BEGIN{print sqrt(16)}'
输出:
4
✅ rand() / srand():生成随机数
awk 'BEGIN{srand(); print rand()}'
输出:
0.793423
3️⃣ 时间处理函数
✅ systime()
获取当前时间戳(秒级)
awk 'BEGIN{print systime()}'
✅ strftime(format, timestamp)
格式化输出时间,默认使用当前时间
awk 'BEGIN{
now = systime();
print strftime("%Y-%m-%d %H:%M:%S", now)
}'
输出示例:
2025-06-22 23:45:01
4️⃣ 输入输出函数
✅ getline
读取下一行内容(可用于循环读取或合并多行)
echo -e "line1\nline2\nline3" | awk '{getline; print $0}'
输出:
line2
line3
✅ system(cmd)
执行系统命令(慎用,可能影响性能)
awk 'BEGIN{system("date")}'
输出:
Sun Jun 22 23:45:01 UTC 2025
5️⃣ 数组排序函数(gawk 特有)
✅ asort(array [, result], how)
对数组值进行排序
awk 'BEGIN{
arr[1] = 3;
arr[2] = 1;
arr[3] = 2;
n = asort(arr, sorted);
for (i=1; i<=n; i++) print sorted[i];
}'
输出:
1
2
3
✅ asorti(array [, result], how)
对数组的键进行排序
awk 'BEGIN{
arr["b"] = 2;
arr["a"] = 1;
arr["c"] = 3;
n = asorti(arr, keys);
for (i=1; i<=n; i++) print keys[i], arr[keys[i]];
}'
输出:
a 1
b 2
c 3
🔍 如何查询 AWK 的内置函数?
方法一:使用 man gawk 查看完整文档(推荐)
man gawk
然后搜索关键词如:
/Built-in Functions/String Functions/Array Functions
方法二:在线查阅官方文档(推荐)
GNU 官方手册地址:
🔗 https://www.gnu.org/software/gawk/manual/html_node/Built_002din-Functions.html
包含所有函数说明 + 示例 + 使用限制。
方法三:使用 info gawk(比 man 更详细)
info gawk
进入交互式帮助界面,适合深入学习。
方法四:使用 --help 快速查看(不太详细)
awk --help
但这个只列出命令行参数,不包括函数列表。
⚙️ 小贴士:如何判断你使用的是不是 gawk
有些 Linux 系统默认的 awk 是 mawk 或 nawk,功能略有不同。
你可以这样检查:
awk --version
输出类似:
GNU Awk 5.1.0, API: 3.2
如果是 GNU Awk,说明支持所有高级函数。
✅ 总结
| 项目 | 内容 |
|---|---|
| 常用函数 | length(), substr(), split(), match(), index(), rand(), systime(), strftime() |
| 排序函数 | asort(), asorti()(仅 gawk 支持) |
| 调用系统命令 | system()(慎用) |
| 查看方式 | man gawk、info gawk、gawk 官方文档 |
| 验证版本 | awk --version |
掌握这些内置函数,你就能轻松实现日志提取、数据清洗、访问统计、自动化报告生成等强大功能!
继续练习真实日志文件,你会越来越熟练地运用这些函数,成为一名真正的 Linux 文本处理高手!🚀🔥

浙公网安备 33010602011771号