我有一个奇妙的shell脚本,它运行得非常漂亮:接受一串Unicode值并对它们进行洗牌。问题是我需要确保每个值都位于字符串中的不同位置。如何获得一个shell脚本来正确洗牌数组值?
例如,如果我的字符串(只用ASCII):
ABCDEFG
我需要知道,没有这些字符都将在同一地点洗牌后:
gbadcef将不起作用,因为“d”在同一个地方。以非常最后一个值,并把它首先会工作......
fabcde
...但它不给我,我需要应用程序的随意性。
实际的数据字符串是Unicode值,长,长,长分号分隔字符串:
₮„‮″⃝Ⴎ𠂮ž etc.
这里的洗牌代码我目前有:
#!/bin/bash
echo "Input Filename:";
read ifilename;
echo "Output Filename:";
read ofilename;
cat $ifilename | sed -r 's/(.[^;]*;)/ \1 /g' | tr " " "\n" | shuf | tr -d "\n" > $ofilename;
这是一个伟大的,紧,我认为这是来自StackOverflow社区中某个人的精彩脚本。任何人都可以告诉我如何修改它,以确保字符串中的任何字符不会意外地出现在同一个地方?
谢谢你的帮助!
你需要什么样的随机性?你的克制使得输出更少随机,而不是更多。 – 2012-02-03 22:27:36
只要它“很好地洗牌”,它不必像它可能的那样随机。随机性并不重要,因为在“甲板”洗牌后,每个字符都处于不同的位置。 – user1149499 2012-02-03 22:48:36
您现有的脚本可以很容易地修改为您的新需求。不要在所有字符之间添加空格,并用换行符替换它,请用换行符替换每个&符号。洗牌后,删除空行,并在每行的开头添加&符号。 – tripleee 2012-02-04 14:17:28