惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
博客园 - 司徒正美
小众软件
小众软件
H
Help Net Security
博客园 - 聂微东
宝玉的分享
宝玉的分享
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
阮一峰的网络日志
阮一峰的网络日志
M
MIT News - Artificial intelligence
博客园 - 【当耐特】
U
Unit 42
大猫的无限游戏
大猫的无限游戏
Apple Machine Learning Research
Apple Machine Learning Research
S
SegmentFault 最新的问题
腾讯CDC
MongoDB | Blog
MongoDB | Blog
云风的 BLOG
云风的 BLOG
J
Java Code Geeks
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Martin Fowler
Martin Fowler
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News

俗子

istio 配置 k8s 节点控制 dns 私有服务器 SeaFile 网盘 golang 私有包 verdaccio 前端私有源 chrony 时间同步 k8s 问题集锦 gitlab jenkins k8s 部署 linux 多显示器管理 mysql记录 nginx 日常 服务器ssh登录配置 域名信息收集工具 ssh port forward redis拾遗-性能指标 逆向工具
awk常用命令及功能
俗子 · 2025-05-25 · via 俗子

AWK 是一种强大的文本处理工具,常用在 Unix/Linux 环境中处理和分析结构化数据。以下是 AWK 的常用命令和功能,简要总结:

基本语法

1
awk [选项] '模式 {动作}' 文件
  • 模式:指定匹配条件(如正则表达式或逻辑条件)。
  • 动作:对匹配的行执行的操作(如打印、计算)。
  • 文件:输入文件,若无文件,可从标准输入读取。

常用选项

  • -F:指定字段分隔符(默认是空格或制表符)。
    1
    awk -F: '{print $1}' /etc/passwd  # 以冒号分隔,打印第一列
  • -v:定义变量。
    1
    awk -v var=5 '{print $1 * var}' file.txt  # 使用变量 var

常用内置变量

  • FS:输入字段分隔符(默认空格)。
  • OFS:输出字段分隔符(默认空格)。
  • NR:当前处理的记录(行)号。
  • NF:当前行的字段数。
  • $0:整行内容。
  • $n:第 n 个字段(从 1 开始)。

常用命令和模式

  1. 打印整行或特定字段

    1
    2
    awk '{print $0}' file.txt  # 打印整行
    awk '{print $1, $3}' file.txt # 打印第 1 和第 3 字段
  2. 条件匹配

    1
    2
    awk '/pattern/ {print $0}' file.txt  # 打印包含 pattern 的行
    awk '$1 == "value" {print $2}' file.txt # 第一字段为 value 时打印第二字段
  3. 指定行号

    1
    2
    awk 'NR==5 {print $0}' file.txt  # 打印第 5 行
    awk 'NR>=2 && NR<=5 {print $0}' file.txt # 打印第 2 到第 5 行
  4. 统计行数或字段

    1
    2
    awk 'END {print NR}' file.txt  # 统计总行数
    awk '{print NF}' file.txt # 每行字段数
  5. 计算(求和、平均值等)

    1
    2
    awk '{sum += $1} END {print sum}' file.txt  # 计算第一列总和
    awk '{sum += $1; count++} END {print sum/count}' file.txt # 计算第一列平均值
  6. 格式化输出

    1
    awk '{printf "%-10s %s\n", $1, $2}' file.txt  # 格式化输出第 1、2 字段
  7. 处理多文件

    1
    awk '{print FILENAME, $0}' file1.txt file2.txt  # 打印文件名和内容
  8. BEGIN 和 END 块

    • BEGIN:在处理文件前执行。
    • END:在处理文件后执行。
      1
      awk 'BEGIN {print "Start"} {print $1} END {print "End"}' file.txt

常用示例

  1. 提取日志中特定列

    1
    awk -F' ' '{print $1, $3}' access.log  # 提取日志第 1 和第 3 列
  2. 统计文件中某值出现次数

    1
    awk '$1 == "error" {count++} END {print count}' log.txt  # 统计 error 出现次数
  3. 替换字段

    1
    awk '{sub("old", "new", $1); print $0}' file.txt  # 将第一字段中的 old 替换为 new
  4. 处理 CSV 文件

    1
    awk -F',' '{print $1, $2}' data.csv  # 处理逗号分隔的 CSV 文件

注意事项

  • AWK 脚本可以保存为文件,使用 -f 选项调用:
    1
    awk -f script.awk file.txt
  • AWK 支持正则表达式、循环、条件语句,适合复杂数据处理。
  • 对于大数据量,AWK 比 sed 或 grep 更高效,尤其在字段操作上。

如果需要更详细的 AWK 教程或特定用例,请告诉我!