【SHELL】awk 命令用法

linux 命令行查询 awk 用法信息

awk --help
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options: GNU long options: (standard)
-f progfile --file=progfile
-F fs --field-separator=fs
-v var=val --assign=var=val
Short options: GNU long options: (extensions)
-b --characters-as-bytes
-c --traditional
-C --copyright
-d[file] --dump-variables[=file]
-D[file] --debug[=file]
-e 'program-text' --source='program-text'
-E file --exec=file
-g --gen-pot
-h --help
-i includefile --include=includefile
-l library --load=library
-L[fatal|invalid|no-ext] --lint[=fatal|invalid|no-ext]
-M --bignum
-N --use-lc-numeric
-n --non-decimal-data
-o[file] --pretty-print[=file]
-O --optimize
-p[file] --profile[=file]
-P --posix
-r --re-interval
-s --no-optimize
-S --sandbox
-t --lint-old
-V --version

 

详细解释 awk 命令行选项:

POSIX 或 GNU 样式选项:

  • -f progfile / --file=progfile:
    从文件 progfile 中读取 awk 程序。这种方式适合当脚本太复杂不便于直接写在命令行时。

    示例:

    awk -f myscript.awk data.txt
  • -F fs / --field-separator=fs:
    指定输入文件中的字段分隔符,默认是空白字符。可以使用其他字符作为分隔符,比如逗号、冒号等。

    示例:

    awk -F ',' '{print $1}' data.csv # 用逗号分隔字段,打印第一列
  • -v var=val / --assign=var=val:
    awk 执行前为变量 var 赋值 val,可以用于在脚本中传递外部参数。

    示例:

    awk -v threshold=100 '{ if ($3 > threshold) print $1 }' data.txt # 传入阈值变量 threshold

GNU 扩展选项:

  • -b / --characters-as-bytes:
    按字节处理字符,适合处理非UTF-8的字符编码。

  • -c / --traditional:
    启用传统 awk 模式,禁用某些GNU扩展特性。

  • -C / --copyright:
    打印版权信息。

  • -d[file] / --dump-variables[=file]:
    将所有 awk 程序中的变量和它们的值转储到 file 中,默认输出到标准输出。

  • -D[file] / --debug[=file]:
    启用调试模式,输出调试信息到指定文件或默认输出。

  • -e 'program-text' / --source='program-text':
    在命令行上直接提供 awk 脚本。适用于简单的 awk 处理。

    示例:

    awk -e '{print $1, $2}' data.txt
  • -E file / --exec=file:
    从文件中读取并执行 awk 程序,功能类似 -f

  • -g / --gen-pot:
    生成 .pot 文件,用于国际化。

  • -h / --help:
    显示帮助信息并退出。

  • -i includefile / --include=includefile:
    awk 脚本中包含另一个文件 includefile,这有助于组织较大的 awk 程序。

  • -l library / --load=library:
    加载动态库 library,为 awk 脚本提供额外功能。

  • -L[fatal|invalid|no-ext] / --lint[=fatal|invalid|no-ext]:
    检查程序是否符合标准规范,如果不符合会输出警告或错误。

  • -M / --bignum:
    支持大数计算。

  • -N / --use-lc-numeric:
    使用当前语言环境的数字格式。

  • -n / --non-decimal-data:
    允许处理非十进制数据。

  • -o[file] / --pretty-print[=file]:
    美化输出,并可选择将其输出到文件。

  • -O / --optimize:
    优化 awk 脚本的性能。

  • -p[file] / --profile[=file]:
    启用性能分析,并输出性能报告到指定文件。

  • -P / --posix:
    只启用 POSIX 标准的 awk 特性,禁用所有 GNU 扩展。

  • -r / --re-interval:
    启用正则表达式的区间语法(如 {min,max})。

  • -s / --no-optimize:
    禁用优化。

  • -S / --sandbox:
    启用沙盒模式,限制程序操作系统命令(如 system()getline 等)。

  • -t / --lint-old:
    使用旧式 lint 警告来检查代码。

  • -V / --version:
    显示版本信息并退出。

awk 的常见用法与示例:

  1. 打印文件中的第一列:

    awk '{print $1}' file.txt
  2. 指定分隔符(逗号分隔):

    awk -F ',' '{print $1}' data.csv
  3. 匹配模式并打印符合条件的行:

    打印包含单词 "error" 的行:

    awk '/error/' log.txt
  4. 过滤并计算字段值:

    计算文件中第三列大于100的行数:

    awk '$3 > 100 {count++} END {print count}' data.txt
  5. 使用变量传递外部参数:

    打印大于指定阈值的行,阈值从命令行传入:

    awk -v threshold=50 '$3 > threshold' data.txt
  6. 统计文件中的非空行数:

    awk 'NF' file.txt | wc -l
  7. 范围匹配:

    打印从包含 "start" 到包含 "end" 的所有行:

    awk '/start/,/end/' file.txt
  8. 修改文件内容(就地编辑):

    将文件中所有 "foo" 替换为 "bar" 并保存修改:

    awk '{gsub(/foo/, "bar"); print}' file.txt > temp && mv temp file.txt

总结:

awk 是一个功能强大的文本处理工具,它可以帮助你处理结构化或半结构化的数据。使用 awk,可以轻松地从文本中提取信息,进行数据筛选、统计和分析。

 

 

计算文件两个字符串之间的非空行数(包括这两个字符串所占行数)

awk 'NF' $file| wc -l  使用该命令统计文件 added projects 到 changed projects 之间的非空行数

awk '/added projects/,/changed projects/ { if (NF) count++ } END { print count }' $file

解释:

  1. /added projects/,/changed projects/:
    这是一个范围模式,表示从匹配 added projects 的行开始,到匹配 changed projects 的行结束。

  2. if (NF):
    NFawk 的内置变量,表示当前行的字段数。只要 NF > 0,即当前行不是空行,就会执行后面的操作。这样可以过滤掉空行。

  3. count++:
    如果当前行非空,计数器 count 自增 1。

  4. END { print count }:
    当处理完所有行后,END 块会输出统计的非空行数。

 

posted @   壹点灵异  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示