过河拆桥策略之随机化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 '{$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
排序:意思是,一行不能拆,原来在一行,现在,还在一行。