awk
awk 是一种处理文本文件的语言,是一个强大的文本分析工具 awk 通过提供编程语言的功能,如变量、数学运算、字符串处理等,使得对文本文件的分析和操作变得非常灵活和高效
之所以叫 awk 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。 link (opens new window)
# sctucture
awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file
一个 awk 脚本通常由: BEGIN 语句块、能够使用模式匹配的通用语句块、END 语句块 3 部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被 单引号 或 双引号 中
# case
echo -e "A line 1\nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }'{print $2, $1}: 交换第一列和第二列顺序'NR==2 {print $NF}: 处理第二行, 打印第二行最后一列内容rg -t log "query url:[a-z|/]+ params:" | LC_ALL=C awk -F 'query url:| params:' '{print $2}' | sort | uniq提取请求 url 并归类总结去重
# 统计 a 出现的个数
awk '{ count += gsub(/a/, "a") } END { print count }' filename.txt
gsub(/a/, "a"): gsub 是 awk 用来替换字符串的函数,这里我们并不需要替换,只是用它来统计每一行中 a 字符的个数/a/是正则表达式,用来匹配字符 a- 每次 gsub 匹配到 a 时,返回匹配到的次数
- count += gsub(...): 把每一行中 a 的数量累加到 count 变量中
END { print count }: 当 awk 处理完所有行后,输出 count 的最终值,也就是文件中字符 a 出现的总次数
# 分割提取
awk -F 'query url:| params:' '{print $2}', reuslt: mainlego_api_request_url
- -F 选项
-F 是 awk 的选项,用于指定分隔符。在这个例子中,-F'query url:| params:' 意味着使用正则表达式 'query url:' 和 ' params:' 作为字段分隔符。| 在正则表达式中表示“或”,所以这两个字符串都作为分隔符
- 分隔符的作用
awk 将输入行分成多个字段。每次遇到一个分隔符,就会把分隔符两边的内容分成不同的字段
aaa query url:/test/api/example params: 123 type: POST
1
使用 query url:| params: 作为分隔符,awk 会把这行分割为三个字段:
- 第一个字段是 "aaa "(query url: 之前的内容,空白部分)
- 第二个字段是 "/test/api/example"(query url: 和 params: 之间的内容,这就是我们要提取的 URL)
- 第三个字段是 " 123"(params: 后面的内容)
{print $2}: 表示输出第二个字段
# link
上次更新: 2025/10/19, 17:40:23