我有字符串="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
生成0
和8
之间的随机数(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