awk 传入关联数组 shell变量作用域

我首先需要构建一个 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];}

 

你可能感兴趣的:(shell)