У меня есть фантастический сценарий оболочки, который прекрасно работает: берет строку значений Unicode и перемешивает их. Проблема в том, что мне нужно быть абсолютно уверенным, что каждое значение находится в другом месте в строке.
Например, если моя строка (просто использующая ascii):
АБВГДЕЖ
Мне нужно знать, что ни один из этих символов не будет в том же месте после перетасовки:
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. Может кто-нибудь сказать мне, как изменить его так, чтобы он гарантировал, что ни один символ в строке случайно не окажется в одном месте?
Спасибо за любую помощь!