Linux 三剑客之 awk

awk 是一个强大的文本处理工具,可以用于模式扫描和处理。以下是 awk 命令的所有选项及其功能的详细说明,并附带示例和注释:

基本用法

awk [POSIX or GNU style options] -f progfile [--] file ...
awk [POSIX or GNU style options] [--] 'program' file ...
  • progfile:包含 awk 脚本的文件。
  • programawk 脚本作为命令行参数传递。

POSIX 选项

  • -f progfile:从 progfile 文件中读取 awk 脚本。

    awk -f script.awk file.txt
    # 从 script.awk 文件中读取 `awk` 脚本并处理 file.txt
    
  • -F fs:设置字段分隔符为 fs。默认是空格或制表符。

    awk -F: '{ print $1 }' /etc/passwd
    # 使用冒号作为字段分隔符,打印每行的第一个字段(用户名)
    
  • -v var=val:将变量 var 设置为值 val,用于 awk 脚本中。

    awk -v threshold=10 '$1 > threshold { print $1 }' file.txt
    # 将阈值变量设置为 10,打印大于 10 的第一列值
    

GNU 扩展选项

  • -b / --characters-as-bytes:将字符视为字节,而不是字符。

    awk -b '{ print length($0) }' file.txt
    # 打印每行的字节长度
    
  • -c / --traditional:使用传统的 awk 语法。

    awk -c '{ print $1 }' file.txt
    # 使用传统 `awk` 语法处理文件
    
  • -C / --copyright:显示版权信息。

    awk -C
    # 显示 `awk` 的版权信息
    
  • -d[file] / --dump-variables[=file]:将 awk 变量的值转储到文件中。

    awk -d dump.txt '{ print $1 }' file.txt
    # 将变量的值转储到 dump.txt 文件
    
  • -e 'program-text' / --source='program-text':将 program-text 作为 awk 程序。

    awk -e '{ print $1 }' file.txt
    # 使用命令行参数指定的 `awk` 程序处理文件
    
  • -E file / --exec=file:执行指定的文件作为 awk 脚本。

    awk -E exec.awk file.txt
    # 执行 exec.awk 文件中的 `awk` 脚本
    
  • -g / --gen-pot:生成 .pot 文件用于国际化。

    awk -g
    # 生成 `.pot` 文件(仅适用于 GNU `awk`)
    
  • -h / --help:显示帮助信息。

    awk -h
    # 显示 `awk` 的帮助信息
    
  • -L [fatal] / --lint[=fatal]:启用语法检查,fatal 表示将检查错误作为致命错误。

    awk -L fatal '{ print $1 }' file.txt
    # 启用语法检查,且将检查错误视为致命错误
    
  • -n / --non-decimal-data:将数字视为非十进制数据。

    awk -n '{ print $1 }' file.txt
    # 将数字视为非十进制数据(较少用到)
    
  • -N / --use-lc-numeric:使用本地化的数字格式。

    awk -N '{ print $1 }' file.txt
    # 使用本地化数字格式处理数字
    
  • -O / --optimize:优化 awk 程序。

    awk -O '{ print $1 }' file.txt
    # 启用程序优化
    
  • -p[file] / --profile[=file]:生成性能分析报告。

    awk -p profile.txt '{ print $1 }' file.txt
    # 生成性能分析报告到 profile.txt 文件
    
  • -P / --posix:启用 POSIX 兼容模式。

    awk -P '{ print $1 }' file.txt
    # 启用 POSIX 兼容模式
    
  • -r / --re-interval:启用正则表达式的区间语法。

    awk -r '{ print $1 }' file.txt
    # 启用正则表达式区间语法
    
  • -S / --sandbox:启用沙箱模式以限制程序的功能。

    awk -S '{ print $1 }' file.txt
    # 启用沙箱模式
    
  • -t / --lint-old:启用旧版的语法检查。

    awk -t '{ print $1 }' file.txt
    # 启用旧版语法检查
    
  • -V / --version:显示版本信息。

    awk -V
    # 显示 `awk` 的版本信息
    

示例

  • 基本计算:计算文件中第一列的总和。

    awk '{ sum += $1 }; END { print sum }' file.txt
    # 计算 file.txt 中第一列所有值的总和
    
  • 打印特定字段:从 /etc/passwd 文件中提取用户名。

    awk -F: '{ print $1 }' /etc/passwd
    # 打印 /etc/passwd 文件中每行的第一个字段(用户名)
    
  • 条件处理:打印第一列大于 10 的值。

    awk -v threshold=10 '$1 > threshold { print $1 }' file.txt
    # 只打印第一列大于 10 的值
    
  • 字段分隔符:使用自定义字段分隔符。

    awk -F',' '{ print $2 }' data.csv
    # 使用逗号作为字段分隔符,打印每行的第二列
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值