2020-12-08 Linux shuf 过河拆桥策略

过河拆桥策略之随机化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

排序:意思是,一行不能拆,原来在一行,现在,还在一行。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容