在bash shell中将具有逗号分隔值的变量拆分为两个随机部分



我有字符串="1,2,3,4,5,6,7,8";我想将字符串拆分为两个不同的变量,具有唯一值,如下所示string_p1=";1,2,3,4,5";字符串p2=";6,7,8〃;

在这里,我不想要任何特定的定义逻辑,而分裂变量,任何随机分裂都可以。但我需要确保我不会遗漏变量字符串中的任何数字

请建议bash脚本来获得以上结果?

使用数组和一些基本的bash字符串操作的一个想法:

string='1,2,3,4,5,6,7,8'
IFS=, arr=( ${string} )                 # break on comma delimiter, store in array

结果:

$ typeset -p arr
declare -a arr=([0]="1" [1]="2" [2]="3" [3]="4" [4]="5" [5]="6" [6]="7" [7]="8")
$ len="${#arr[@]}"
8

生成08之间的随机数(arr[]的长度),例如:

$ n=$(( RANDOM % len ))
$ echo $n
2                                       # obviously this will vary between 0 and 8 based on value of $RANDOM

构建我们的最终字符串:

$ string_p1=${arr[@]:0:n}
$ string_p2=${arr[@]:n}
$ typeset -p string_p1 string_p2
declare -- string_p1="1 2"
declare -- string_p2="3 4 5 6 7 8"

现在用逗号替换空格:

$ string_p1="${string_p1// /,}"
$ string_p2="${string_p2// /,}"
$ typeset -p string_p1 string_p2
declare -- string_p1="1,2"
declare -- string_p2="3,4,5,6,7,8"

注意:因为分割仅基于$RANDOM,所以很有可能生成的字符串之一为空(例如n=0);OP可以根据需要添加更多逻辑来解决此问题(例如,如果n=0,则设置n=1以确保string_p1不为空)


用不同的输入进行旋转:

string='3,24,666.83,2,9,0,34,23,45,12,1'
IFS=, arr=( ${string} )
len="${#arr[@]}"
n=$(( RANDOM % len ))
string_p1=${arr[@]:0:n}
string_p2=${arr[@]:n}
string_p1="${string_p1// /,}"
string_p2="${string_p2// /,}"
typeset -p len n string_p1 string_p2

这将生成:

declare -- len="11"
declare -- n="8"
declare -- string_p1="3,24,666.83,2,9,0,34,23"
declare -- string_p2="45,12,1"

我试过这个:

string="1,2,3,4,5,6,7,8"
echo ${string:0:${#string}/2}
echo ${string:${#string}/2}

它将字符串一分为二,这就是输出:

1,2,3,4
,5,6,7,8

相关内容

  • 没有找到相关文章

最新更新