我有 string="1,2,3,4,5,6,7,8" 我想將字串拆分為 2 個不同的變數,其唯一值如下 string_p1="1,2,3,4,5" string_p2= “6,7,8”
在這里,我不想要任何特定定義的邏輯,而拆分變數任何隨機拆分都可以。但我需要確保我沒有遺漏變數字串中存在的任何數字
請建議 bash 腳本以獲得上述結果?
uj5u.com熱心網友回復:
我試過這個:
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
uj5u.com熱心網友回復:
使用陣列和一些基本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"
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/323959.html
