【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 @ 2024-10-22 11:45  壹点灵异  阅读(4)  评论(0编辑  收藏  举报