Bash 将命令行参数传递给gawk脚本
我有一个脚本Bash 将命令行参数传递给gawk脚本,bash,shell,awk,sed,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 arg
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
,但它们都不起作用。有人能告诉我哪里出了问题吗?正确的方法是什么?问题是您为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
#!/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
}' "$@"
更新1
如果您有其他参数(例如要处理的文件名),
必须首先删除args的第一个部分(在BEGIN
部分):
@楚斌:非常感谢。这是可行的,但还有另一个问题。我在程序中使用输入和输出文件,如:#/bin/bash var1=$1 gawk'BEGIN{printf“argc=%d\n argv0=%s\n argv1=%s\n var1=%s\n\n argc,ARGV[0],ARGV[1],$var1}{print$0}''$@“in.file>out.file运行此脚本时,出现以下错误:$sh chk.awk 10 gawk:cmd。第2行:致命:无法打开文件“10”进行读取(没有这样的文件或目录)是否可以更新如何传递参数10here@user1182722:处理后,应删除开始部分中的第一个参数it@Chubin:非常感谢你的帮助。成功了:)