Ada*_*amR 6 shell awk shell-script
我有一个 awk 脚本,我希望能够将 N 个参数传递给它并从标准输入读取。我希望能够做类似的事情
tail -f logfile | my_cool_awk_scipt var1 var2 var3 ... varN
然后在脚本中使用这些变量。
#!/bin/awk -f
BEGIN {
print "AWK Script Starting"
print ARGV[1]
}
{
if ($0 < ARGV[1])
print $0
else if ($0 < ARGV[2])
print $0 + ARGV[2]
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试按原样传递变量,它会打印ARGV[1]然后点击
awk: ./my_cool_awk_script:4: fatal: cannot open file `var1' for reading (No such file or directory)
Run Code Online (Sandbox Code Playgroud)
我可以,
tail -f logfile | my_cool_awk_scipt -v var1=var1 -v var2=var2 -v var3=var3 ... varN=varN
Run Code Online (Sandbox Code Playgroud)
但这有点限制和冗长。我知道我也可以将它包装在一个 shell 脚本中,但我不确定将我所拥有的东西嵌入到类似的东西中的干净方法。
awk 到达脚本主体的那一刻,在 之后BEGIN,它将想要读取 ARGV[x] 中指定的文件名。所以就用核弹吧。
$ cat a.awk
#!/bin/awk -f
BEGIN {
print "AWK Script Starting"
ZARGV[1]=ARGV[1]
ZARGV[2]=ARGV[2]
ARGV[1]=""
ARGV[2]=""
}
{
if ($0 < ZARGV[1])
print $0
else if ($0 < ZARGV[2])
print $0 + ZARGV[2]
}
$
Run Code Online (Sandbox Code Playgroud)
例子:
$ cat logfile
1
2
3
4
5
$ ./a.awk 3 4 <logfile
AWK Script Starting
1
2
7
$
Run Code Online (Sandbox Code Playgroud)