【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
程序。这种方式适合当脚本太复杂不便于直接写在命令行时。示例:
-
-F fs
/--field-separator=fs
:
指定输入文件中的字段分隔符,默认是空白字符。可以使用其他字符作为分隔符,比如逗号、冒号等。示例:
-
-v var=val
/--assign=var=val
:
在awk
执行前为变量var
赋值val
,可以用于在脚本中传递外部参数。示例:
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
处理。示例:
-
-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
的常见用法与示例:
-
打印文件中的第一列:
-
指定分隔符(逗号分隔):
-
匹配模式并打印符合条件的行:
打印包含单词 "error" 的行:
-
过滤并计算字段值:
计算文件中第三列大于100的行数:
-
使用变量传递外部参数:
打印大于指定阈值的行,阈值从命令行传入:
-
统计文件中的非空行数:
-
范围匹配:
打印从包含 "start" 到包含 "end" 的所有行:
-
修改文件内容(就地编辑):
将文件中所有 "foo" 替换为 "bar" 并保存修改:
总结:
awk
是一个功能强大的文本处理工具,它可以帮助你处理结构化或半结构化的数据。使用 awk
,可以轻松地从文本中提取信息,进行数据筛选、统计和分析。
计算文件两个字符串之间的非空行数(包括这两个字符串所占行数)
awk 'NF' $file| wc -l 使用该命令统计文件 added projects 到 changed projects 之间的非空行数
解释:
-
/added projects/,/changed projects/
:
这是一个范围模式,表示从匹配added projects
的行开始,到匹配changed projects
的行结束。 -
if (NF)
:NF
是awk
的内置变量,表示当前行的字段数。只要NF > 0
,即当前行不是空行,就会执行后面的操作。这样可以过滤掉空行。 -
count++
:
如果当前行非空,计数器count
自增 1。 -
END { print count }
:
当处理完所有行后,END
块会输出统计的非空行数。