我首先需要构建一个 time的关联数组,比如time[2010-01-01]=1;
第一个遇到的问题就是
cat timeItem |while read item ;
do
time[$item]=0
done
使用这样的方法在后面使用time关联数组的时候一直是 空的。
原因: 使用管道的方式会开辟一个新的进程,估计time 是一个新的副本传入过去所以改变的值没有效果,
这是用管道编程的时候必须要注意;
使用如下方式就可以解决:
while read item ;
do
time[$item]=0
done < timeItem.txt
在构建好time数组之后就是要考虑如何传入到awk 中,
网络上的说的使用 -v arry = "$time" 这种方式是不行的,
可行的方案就是 获得 time 的键的字符串,和 time的值得字符串,然后在 awk的 BEGIN{}语句中进行split划分在构建出 time 关联数组,代码如下:
cat $fileName|awk -F, -v s1="${time[*]}" -v s2="${!time[*]}" '
BEGIN{split(s1,s3," ");split(s2,s4," ");for (i=1;i<=length(s4);i++) res[s4[i]]=s3[i];}