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

本文介绍在Shell脚本中如何正确地将一个已填充的关联数组传递给awk命令进行进一步处理的方法。文章首先指出使用管道传递时存在的问题,并给出了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值