我有一个脚本chk.awk
,我想传递一些命令行参数。它有awk
语句,sed
命令等。例如,我在下面的一个小程序中要传递命令行参数。
#!/bin/bash
var1=$1
gawk '
BEGIN {
printf "argc = %d\n argv0=%s\n argv1=%s\n var1=%s\n",ARGC,ARGV[0],ARGV[1],$var1
}'
但是当我尝试时:
$ sh chk.awk 10 20
argc = 1
argv0=gawk
argv1=
var1=
上面我尝试通过两种方式显示命令行参数,即argv
& $1
,但它们都不起作用。任何人都可以让我知道我在哪里错了吗?这样做的正确方法是什么?
答案 0 :(得分:1)
问题在于您为shell脚本提供参数,但不为awk脚本提供参数。
您必须在"$@"
的调用中添加gawk
。
#!/bin/bash
var1=$1
gawk '
BEGIN {
printf "argc = %d\n argv0=%s\n argv1=%s\n var1=%s\n",ARGC,ARGV[0],ARGV[1],$var1
}' "$@"
否则你将在shell脚本中使用你的参数,它们将不会传递给gawk
。
更新1
如果您有其他args(例如要处理的文件名),
你必须先删除args的第一个移植(在BEGIN
部分):
#!/bin/bash
var1=$1
gawk '
BEGIN {
printf "argc = %d\n argv0=%s\n argv1=%s\n var1=%s\n",ARGC,ARGV[0],ARGV[1],$var1;
delete ARGV[1]
}' "$@" filename