乘以 bash 数组的元素并将数组元素设置为新值

乘以 bash 数组的元素并将数组元素设置为新值

在 bash 中,如果发现数组中的某个元素包含 a K,我想将该元素乘以 1000 并将该元素设置为乘积。

for i in "${stats_array[@]}"
do
        if echo "$i" | grep -q K; then
                # set that value to that value times 1000
        fi
done

这是如何在 bash 脚本中完成的?

我的数组可能如下所示:

stats_array: 1, 54, 54K, 99

我希望它看起来像:

stats_array: 1, 54, 54000, 99

答案1

$ { IFS=, ; arr=( 1,54,54K,99k ); }

$ printf '%s\n' ${arr[@]}
1    
54    
54K    
99k

## note: enable extended pattern matching for [...] with 'shopt -s extglob'
$ rearr=( "${arr[@]//%[Kk]/000}" )
$ printf '%s\n' ${rearr[@]}
1    
54    
54000    
99000

## or write the changes to same array
$ arr=( "${arr[@]//%[Kk]/000}" )

也可以看看:如何在 bash 中向数组添加/删除元素?

答案2

迭代指数数组的值,因此很容易设置新值。

这用于case在全局模式上进行分支,您可以看到很容易将其扩展到MG

stats_array=( 1 54 54K 99 )
for idx in "${!stats_array[@]}"; do
  value=${stats_array[idx]};
  case $value in
    *K) stats_array[idx]=$(( ${value%K} * 10**3 )) ;;
  esac
done
declare -p stats_array
declare -a stats_array=([0]="1" [1]="54" [2]="54000" [3]="99")

请注意,bash 算术不能处理浮点数,因此你不能期望53.9K将其变成53900

相关内容