【发布时间】:2021-09-09 18:24:57
【问题描述】:
所以我有一个名为 testingFruits.csv 的文件,其中包含以下列:
name,value_id,size
apple,1,small
mango,2,small
banana,3,medium
watermelon,4,large
我还有一个关联数组存储以下数据:
fruitSizes[apple] = xsmall
fruitSizes[mango] = small
fruitSizes[banana] = medium
fruitSizes[watermelon] = xlarge
我是否可以根据关联数组中“名称”列中每个值的数据更新文件中的“大小”列?
我尝试过使用 awk,但没有运气。这是我尝试做的一个示例:
awk -v t="${fruitSizes[*]}" 'BEGIN{n=split(t,arrayval,""); ($1 in arrayval) {$3=arrayval[$1]}' "testingFruits.csv"
我知道这个命令会得到 bash 定义的数组fruitSizes,对所有值进行拆分,然后检查第一列(名称)是否在 fruitSizes 数组中。如果是,那么它将使用在fruitSizes 中找到的该特定名称的值更新第三列(大小)。
不幸的是,这给了我以下错误:
参数列表太长
这是我希望在同一个 testingFruits.csv 文件中的预期输出:
name,value_id,size
apple,1,xsmall
mango,2,small
banana,3,medium
watermelon,4,xlarge
我想处理的一个极端情况是 name 列中存在重复值,而 value_id 和 size 列的值不同。
【问题讨论】:
-
仅供参考,将 bash 关联数组作为起点可能是个坏主意,因为它们速度慢且不可移植,并且使脚本的其余部分更难实现,您应该改用 awk 来读取您从中填充该数组的任何输入。