在 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
在全局模式上进行分支,您可以看到很容易将其扩展到M
和G
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