【译】 AWK教程指南 9读取命令行上的参数
2013-11-21 20:47
302 查看
大部分的应用程序都允许使用者在命令之后增加一些选择性的参数。执行awk时这些参数大部分用于指定数据文件文件名,有时希望在程序中能从命令行上得到一些其它用途的数据。本小节中将叙述如何在awk程序中取用这些参数。
建立文件如下,命名为 see_arg:
执行如下命令:
结果屏幕出现:
说明:
1. ARGC,ARGV[ ] 为awk所提供的内置变量。
ARGC:为一整数。代表命令行上,除了选项-v,-f 及其对应的参数之外所有参数的数目。
ARGV[ ]:为一字符串数组。ARGV[0],ARGV[1],...,ARGV[ARGC-1] 分别代表命令行上相对应的参数。
例如,当命令行为:
或
其 ARGC 的值为 3
ARGV[0] 的值为 "awk"
ARGV[1] 的值为 "data1"
ARGV[2] 的值为 "data2"
命令行上的 "-f program1"," -vx=36",或程序部分 '{ print $1, $2}' 都不会列入 ARGC 及 ARGV[ ] 中。
2. awk 利用 ARGC 来判断应打开的数据文件个数。
但使用者可强行改变 ARGC;当 ARGC 的值被使用者设为 1 时,awk将被蒙骗,误以为命令行上并无数据文件文件名,故不会以 ARGV[1],ARGV[2],...为文件名来打开文件读取数据;但在程序中仍可通过 ARGV[1],ARGV[2],...来取得命令行上的数据。
某一程序 test1.awk 如下:
于命令行上键入
执行时 awk 会打开数据文件 data_file 以进行处理,但不会打开以appleo、range 为文件名的文件(因为 ARGC 被改成2)。但仍可通过ARGV[2]、ARGV[3]取得命令行上的参数 apple、orange。
3. 也可以用下列命令来达成上例的效果。
建立文件如下,命名为 see_arg:
awk ' BEGIN { for( i=0; i<ARGC ; i++) print ARGV[i] # 依次印出awk所记录的参数 } ' $*
执行如下命令:
$ ./see_arg first-arg second-arg
结果屏幕出现:
说明:
1. ARGC,ARGV[ ] 为awk所提供的内置变量。
ARGC:为一整数。代表命令行上,除了选项-v,-f 及其对应的参数之外所有参数的数目。
ARGV[ ]:为一字符串数组。ARGV[0],ARGV[1],...,ARGV[ARGC-1] 分别代表命令行上相对应的参数。
例如,当命令行为:
$ awk -vx=36 -f program1 data1 data2
或
$ awk '{ print $1 ,$2 }' data1 data2
其 ARGC 的值为 3
ARGV[0] 的值为 "awk"
ARGV[1] 的值为 "data1"
ARGV[2] 的值为 "data2"
命令行上的 "-f program1"," -vx=36",或程序部分 '{ print $1, $2}' 都不会列入 ARGC 及 ARGV[ ] 中。
2. awk 利用 ARGC 来判断应打开的数据文件个数。
但使用者可强行改变 ARGC;当 ARGC 的值被使用者设为 1 时,awk将被蒙骗,误以为命令行上并无数据文件文件名,故不会以 ARGV[1],ARGV[2],...为文件名来打开文件读取数据;但在程序中仍可通过 ARGV[1],ARGV[2],...来取得命令行上的数据。
某一程序 test1.awk 如下:
BEGIN{ number = ARGC #先用number 记住实际的参数个数. ARGC = 2 # 自行更改 ARGC=2, awk将以为只有一个资料文件 # 仍可藉由ARGV[ ]取得命令行上的资料. for( i=2; i<number; i++) data[i] = ARGV[i] } ........
于命令行上键入
$ awk -f test1.awk data_file apple orange
执行时 awk 会打开数据文件 data_file 以进行处理,但不会打开以appleo、range 为文件名的文件(因为 ARGC 被改成2)。但仍可通过ARGV[2]、ARGV[3]取得命令行上的参数 apple、orange。
3. 也可以用下列命令来达成上例的效果。
$ awk -f test2.awk -v data[2]="apple" -v data[3]="orange" data_file
相关文章推荐
- awk 如何读取命令行上的参数
- 【译】 AWK教程指南 11递归程序
- 【译】 AWK教程指南 附录A-Patterns
- Python解析命令行读取参数 -- argparse模块
- C#从命令行读取参数的方法
- Gradle 教程说明 用户指南 第11章 使用 Gradle 命令行
- 记录一个 spring cloud 配置中心的坑,命令行端口参数无效,被覆盖,编码集问题无法读取文件等.
- Golang 读取操作系统命令行控制台传入的参数列表os.Args的多种方式
- 【译】 AWK教程指南 附录B-Actions
- 如何正确实现PHP命令行读取参数
- DroneKit教程(四):属性和参数的读取与设置
- 【译】 AWK教程指南 1前言
- 【译】 AWK教程指南 附录C-AWK的内建函数
- [置顶] Gradle 教程说明 用户指南 第11章 使用 Gradle 命令行
- 【译】 AWK教程指南 2概述
- shell脚本 简单的从命令行读取参数
- 【译】 AWK教程指南 附录D-AWK的内置变量
- 一个通过命令行读取参数的例子
- shell从管道读取命令行并解析,双引号中有空格计算为一个参数
- 【译】 AWK教程指南 3计算并打印文件中指定的字段数据