awk:从bash传递变量

awk:从bash传递变量,awk,Awk,以下代码中出现语法错误。是否有一个awk版本不支持“-v”选项,或者我遗漏了什么?谢谢 #!/usr/local/bin/bash f_name="crap.stat" S_Date="2012-02-10" E_Date="2012-02-13" awk -F "\t" -v s_date="$S_Date" -v e_date="$E_Date" 'BEGIN {print s_date,e_date}' $f_name 您的代码完全适用于my awk(GNU awk 3.1.6) 不

以下代码中出现语法错误。是否有一个awk版本不支持“-v”选项,或者我遗漏了什么?谢谢

#!/usr/local/bin/bash
f_name="crap.stat" 
S_Date="2012-02-10"
E_Date="2012-02-13"

awk -F "\t" -v s_date="$S_Date" -v e_date="$E_Date" 'BEGIN {print s_date,e_date}' $f_name

您的代码完全适用于my awk(GNU awk 3.1.6)

不过还有另一种方法,如果导出变量,可以在
ENVIRON
array中使用它

$ export f_name="crap.stat"
$ awk '{ print ENVIRON["f_name"] }' anyfile
crap.stat

Solaris 10上的默认
awk
程序(又名
oawk
)似乎不支持
-v
选项;替代的
nawk
程序确实支持它。有些人会切换名称
awk
,因此它是指向
nawk
的链接,因此您无法轻易预测哪个名称是
awk


HP-UX 11.x、AIX 6.x和Mac OS x(10.7.x)上的
awk
程序都支持
-v
表示法,这并不奇怪,因为它希望支持
-v

语法错误是什么?awk:第1行附近的语法错误awk:第1行附近的退出awk版本是什么?和系统配置?请检查
awk--version
哪个bash
运行了awk--version,但它仍在运行,奇怪吗?我使用的是solaris 10 x86Thanks,但是,即使没有输入文件,我也会出现错误:awk-v sdate=“$S_Date”'在不支持
-v sdate=value'.
的awk上开始{print sdate},您可以改为这样做:
awk'.'sdate=value
。缺点是分配在
BEGIN{…}
规则中不可见,但只有在awk开始处理其argv时才可见。