awk
是一个强大的文本处理工具,可以用于模式扫描和处理。以下是 awk
命令的所有选项及其功能的详细说明,并附带示例和注释:
基本用法
awk [POSIX or GNU style options] -f progfile [--] file ...
awk [POSIX or GNU style options] [--] 'program' file ...
progfile
:包含awk
脚本的文件。program
:awk
脚本作为命令行参数传递。
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 # 使用逗号作为字段分隔符,打印每行的第二列