Jacky's blog
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)

Jack Yang

编程; 随笔
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)
  • shell

    • shell 入门指南
    • linux 入门指南
    • Shell 常用命令速查手册
    • Shell 代码片段集合
    • awk
      • sctucture
      • case
        • 统计 a 出现的个数
        • 分割提取
      • link
    • fd
    • ftp
    • sftp
    • ifconfig
    • ssh
    • sed
    • xargs
  • tool

  • 网络

  • algo

  • compute_base

  • blog

  • growth

  • java

  • C&C++

  • ai

  • secure

  • cms

  • english

  • 生活

  • 金融学

  • more

  • other
  • shell
Jacky
2024-09-05
目录

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

  1. -F 选项

-F 是 awk 的选项,用于指定分隔符。在这个例子中,-F'query url:| params:' 意味着使用正则表达式 'query url:' 和 ' params:' 作为字段分隔符。| 在正则表达式中表示“或”,所以这两个字符串都作为分隔符

  1. 分隔符的作用

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: 后面的内容)
  1. {print $2}: 表示输出第二个字段

# link

#shell
上次更新: 2025/10/19, 17:40:23
Shell 代码片段集合
fd

← Shell 代码片段集合 fd→

最近更新
01
npx 使用指南
10-12
02
cursor
09-28
03
inspect
07-20
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Jacky | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式