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)

匹配正则表达式,设置 RSTARTRLENGTH

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 系统默认的 awkmawknawk,功能略有不同。

你可以这样检查:

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 gawkinfo gawkgawk 官方文档
验证版本 awk --version

掌握这些内置函数,你就能轻松实现日志提取、数据清洗、访问统计、自动化报告生成等强大功能!

继续练习真实日志文件,你会越来越熟练地运用这些函数,成为一名真正的 Linux 文本处理高手!🚀🔥

posted @ 2025-06-22 22:56  红尘过客2022  阅读(91)  评论(0)    收藏  举报