過河拆橋策略之隨機化shuf
z@z-O-E-M:~/zshangke/20201208_suijihua$seq 5? |?shuf
1
3
5
2
4
z@z-O-E-M:~/zshangke/20201208_suijihua$seq 5? |?shuf
3
5
4
1
2
既然有了shuf做這個事情,為什么我們還要做?!
一:每次Linux升級時,加入將近1000個命令,全要背???10個命令來如意地實現shuf。
二:如果有個功能,沒人做過,怎么辦?習慣于把有的當沒有的來做了,哪里怕再來一個新的。
原始創新,教授和創新不等價。
思路:生成一列隨機數,加行號, 按隨機數排序,刪除隨機數。
1生成隨機數:
echo hi |awk 'END{for(i=0;i<5;i++) print rand();}'?或
echo"rand(5,1)"| octave 2> /dev/null | grep "0"?或是
dd if=/dev/urandom bs=1 count=5 2> /dev/null | xxd? | awk '{print $2$3$4}' | sed's/\(..\)/\1\n/g' | sed '/^$/d'?或是
2?加行號:
cat -n或是
grep . -n | sed 's/:/ /g'或是
awk '{printf NR" "; print $1}'或是
3?按隨機數排序:只有sort -k 2
4?刪除第2列(即隨機數):
awk '{print$1}'??或
awk '{$2=""; print $0}'?讓第二列為空,再打印整個行的內容
再講一次:
z@z-O-E-M:~/zshangke/20201208_suijihua$echo "rand(5,1)"| octave 2> /dev/null | grep "0"?生成隨機數,
?? 0.84996
?? 0.66578
?? 0.64094
?? 0.40795
?? 0.69908
z@z-O-E-M:~/zshangke/20201208_suijihua$echo "rand(5,1)" | octave 2> /dev/null | grep "0"?? |?cat –n?加行號,
?1???? 0.66143
?2???? 0.48947
?3???? 0.49861
?4???? 0.89093
?5???? 0.15336
z@z-O-E-M:~/zshangke/20201208_suijihua$echo "rand(5,1)" | octave 2> /dev/null | grep "0"?? |? cat-n? |?sort -k?2 -g
?5???? 0.15336
?2???? 0.48947
?3???? 0.49861
?1???? 0.66143
?4???? 0.89093
排序:意思是,一行不能拆,原來在一行,現在,還在一行。