我有一個奇妙的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