首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改数组中逗号分隔值的最简单方法?

修改数组中逗号分隔值的最简单方法?
EN

Stack Overflow用户
提问于 2020-04-23 13:26:46
回答 1查看 46关注 0票数 0

假设我有一个包含n个元素的数组。每个元素都是一串逗号分隔的x,y坐标对,例如"581,284“。这些x,y值没有设置字符长度。

假设我想从每个x值中减去8,从每个y值中减去5。

修改x和y,而不永久分离x和y值的最简单方法是什么?

例如,第一数组元素"581,284“变为"573,279",第二数组元素"1013,562”变为"1005,274",以此类推。

我在这个问题上花了几个小时(我是bash的业余爱好者),我的方法似乎非常复杂。

请注意,上面的撇号只是为了强调,并不是问题的一部分。

提前谢谢你,我已经为此绞尽脑汁好一阵子了!

编辑:以下摘录是我所采用的方法。如你所知,我对bash了解不多。

代码语言:javascript
复制
   while read value
   do
     if [[ -z $offset_list ]]
     then
       offset_list="$value"
     else
       offset_list="$offset_list,$value"
     fi
   done < text.txt
   new_offset=${offset_list//,/ }
   read -a new_array <<< $new_offset

   for value in "${new_array[@]}"
     do
       if [[ $((value%2)) -eq 1 ]]
       then
         value=$((value-8));
         new_array[$counter]=$value
         counter=$((counter+1));
       elif [[ $((value%2)) -eq 0 ]]
       then
         value=$((value-5));
         new_array[$counter]=$value
         counter=$((counter+1));
       fi
     done

基本上,我最初读取了坐标对,并从它们中剥离了逗号,然后计划修改填充到新数组中的奇数/偶数值。在这一点上,我意识到必须有一种更有效的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-23 13:46:57

我相信以下内容应该能达到你想要的效果:

代码语言:javascript
复制
#!/bin/bash

input=("581,284" "1013,562")

echo "Initial array ${input[@]}"
for index in ${!input[@]}; do
    value=${input[$index]}
    x=${value%%,*}
    y=${value##*,}

    input[$index]="$((x-8)),$((y+5))"
done

echo "Modified array ${input[@]}"

${!input[@]}允许我们遍历bash数组的索引。

${value%%,*}${value##*,}依赖于bash参数替换来分别删除逗号之后或之前的所有内容。这有效地将字符串拆分为两个变量。

从那里开始,就是改变数组所需的数学运算和变量重新赋值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61379919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档