我正在运行ubuntu11.10,我认为它默认使用mawk。假设我有一个名为'script.awk'的awk脚本,它会收到一个参数。另外,我想指定要解析的文件的名称。因此,如果我使用'10'作为解析'file'的参数,我应该运行:
./script.awk 10 file
然而,'10'被解释为要解析的文件,而不是参数。我知道我可以使用-v标志来设置内部变量,但是我想使用ARGV来检查参数是否被传递,如:
if (ARGC < 2) { exit 1 }
是否有解决方法,或者我必须坚持使用-v标志?
答案 0 :(得分:1)
在使用参数之前,将执行awk脚本中的BEGIN块。这使您有机会检查正确数量的参数并进行更改。有一种特殊的行为,如果参数是一个空字符串,它会被跳过,所以你可以这样做:
BEGIN {
if (ARGC<3) exit(1);
arg=ARGV[1]
ARGV[1]=""
}
答案 1 :(得分:0)
添加到上面的评论(添加BEGIN后)需要找到正确的awk。
我们有awk的版本(如nawk,gawk)。 尝试找到使用man(或帮助)来查找哪个版本的ARGC和ARGV落入哪个AWK命令。 使用相应的AWK。
nawk 'BEGIN{if(ARGC>9) print "it ll get print . as i used NAWK" }' 1 2 3 4 5 6 7 8 9
输出
it ll get print . as i used NAWK
awk 'BEGIN{if(ARGC>9) print "It throw error . as i used AWK " }' 1 2 3 4 5 6 7 8 9
输出
awk: can't open 1