【发布时间】:2011-09-26 08:39:22
【问题描述】:
我有一个在命令行上成功执行的命令:
ls -l | awk '/Sep 26/{split($8,a,":");if(a[1]a[2]>=1045 && a[1]a[2]<=1145)print $9}'
我在下面的 shell 脚本中包含了同样的东西:
#!/bin/ksh
date1=$1
date2=$2
time1=$3
time2=$4
ls -l| awk -v d1=${date1} -v d2=${date2} -v t1=${time1} -v t2=${time2} '/d1 d2/{split($8,a,":");if(a[1]a[2]>=t1 && a[1]a[2]<=t2) print $9}'
但这不起作用。请看下面的执行
ksh -vx test.sh Sep 26 1045 1145
#!/bin/ksh
date1=$1
+ date1=Sep
date2=$2
+ date2=26
time1=$3
+ time1=1045
time2=$4
+ time2=1145
ls -l| awk -v d1=${date1} -v d2=${date2} -v t1=${time1} -v t2=${time2} '/d1 d2/{split($8,a,":");if(a[1]a[2]>=t1 &&a[1]a[2]<=t2)print $9}'
+ awk -v d1=Sep -v d2=26 -v t1=1045 -v t2=1145 /d1 d2/{split($8,a,":");if(a[1]a[2]>=t1 &&a[1]a[2]<=t2)print $9}
+ ls -l
awk: syntax error near line 1
awk: bailing out near line 1
我正在使用 Solaris OS:我现在尝试使用 nawk,但没有错误但也没有输出。
pearl[ncm_o11.2_int.@].293> ksh -vx test.sh Sep 26 1045 1145
#!/bin/ksh
date1=$1
+ date1=Sep
date2=$2
+ date2=26
time1=$3
+ time1=1045
time2=$4
+ time2=1145
ls -l| nawk -v d1=${date1} -v d2=${date2} -v t1=${time1} -v t2=${time2} '/d1 d2/{split($8,a,":");if(a[1]a[2]>=t1 &&a[1]a[2]<=t2)print $9}'
+ ls -l
+ nawk -v d1=Sep -v d2=26 -v t1=1045 -v t2=1145 /d1 d2/{split($8,a,":");if(a[1]a[2]>=t1 &&a[1]a[2]<=t2)print $9}
当我在脚本中没有 shell 变量的情况下执行时。它执行完美。
*注意:*我使用的是 Solaris 操作系统。
我发现问题出在 shell 脚本中的最终框架命令:
ls -l|nawk -v d1=Sep -v d2=26 -v t1=1045 -v t2=1145 '/d1 d2/{split($8,a,":");if(a[1]a[2] >=t1 && a[1]a[2]<=t2)print $9}'
但我不确定为什么使用 -v 标志无法提供正确的输出
【问题讨论】:
-
awk --v。另外,这与shell变量有什么关系吗?如果不替换变量直接调用它会起作用吗?