Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1632757
  • 博文数量: 584
  • 博客积分: 13857
  • 博客等级: 上将
  • 技术积分: 11883
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-16 09:34

分类: LINUX

2010-01-06 15:35:48

大部分的应用程序都允许使用者在命令之后增加一些选择性的参数.执行awk时这些参数大部分用于指定数据文件文件名, 有时希望在程序中能从命令行上得到一些其它用途的数据. 本小节中将叙述如何在awk程序中取用这些参数.

建立文件如下, 命名为 see_arg :

#!/bin/sh

awk '
BEGIN {
for( i=0; iprint ARGV[i] # 依次印出awk所记录的参数
}
' $*

执行如下命令 :

$ ./see_arg first-arg second-arg 

结果屏幕出现 :

awk
first-arg
second-arg

[ 说明 : ]

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[ ] 中.

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

于命令行上键入

$ awk -f test1.awk data_file apple orange 

执行时 awk 会打开数据文件 data_file 以进行处理. 但不会打开以apple,orange 为档名的文件(因为 ARGC 被改成2). 但仍可通过ARGV[2], ARGV[3]取得命令行上的参数 apple, orange

也可以用下列命令来达成上例的效果.

$awk -f test2.awk -v data[2]="apple" -v data[3]="orange" data_file 
阅读(1154) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~