将命令行参数传递给gawk脚本

时间:2014-05-22 06:52:50

标签: bash shell awk sed

我有一个脚本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,但它们都不起作用。任何人都可以让我知道我在哪里错了吗?这样做的正确方法是什么?

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