[megoldva] Urandom alapú randomizálás bash nyelven

Bash nyelven szeretnék egy listát úgy rendezni véletlenszerűen, mint ahogyan a sort --random-sort csinálja, viszont szeretném explicit módon megmondani neki, hogy a /dev/urandom (később saját device) legyen a randomizáció alapja. Létezik erre függvénykönyvtár? Ha nem, hogyan oldhatom meg? Más nyelv egyelőre nem játszik.

Hozzászólások


$ dd if=/dev/urandom bs=1 count=1 2>/dev/null | xxd -p
6a

A sort az teljesen ki van zárva?
Ez nem jó esetleg?:


echo -e '2\n1\n3\n5\n4' | sort -R --random-source=/dev/urandom

(http://stackoverflow.com/questions/537191/the-sort-r-command-doesnt-sor…)

Ha nem jó a sort parancs, akkor én vagy googliznék ilyen random sort algoritmusok után, vagy megnézném,
hogy maga a sort hogyan csinálja (forrás) és megpróbálnám bash-ben implementálni (jó étvágyat :))

De biztos van jobb megoldás.

Szerk.

Szerintem nem nagyon fogsz tudni beleszólni, mármint akkor, ha a shell-be beépített véletlenszámgenerátort használod. Erről összesen ennyit lehet tudni:


       RANDOM Each time this parameter is referenced, a random integer between
              0 and 32767 is generated.  The sequence of random numbers may be
              initialized by assigning a value to RANDOM.  If RANDOM is unset,
              it loses its special properties,  even  if  it  is  subsequently
              reset.

Ha ezt hanyagolod, akkor meg mi akadályoz meg abban, hogy read-del az urandomból olvass? Pl:

read -N 1 char < /dev/urandom

a read használatával van egy kis bajom, de lehet, hogy könnyen megoldható, csak nem látom a fától a vadőrt. a rendezésemet úgy oldanám meg, hogy minden sorhoz generálok valamekkora random adatot az urandomból, aztán ennek a random adatnak kiszámolom a sha512 (vagy akármelyik) sumját. ezután a sumok szerint rendezek. nade mi van akkor, ha az urandomból két ugyanolyan chunkot kapok? minden új chunkot össze kell hasonlítanom az előzőekkel, nehogy ugyanaz kétszer előjöjjön. aztán mi van, ha két különböző chunk hashsumja ugyanaz? kicsi a valószínűsége, de nullánál nagyobb. ezt is ellenőriznem kell. ha nem menet közben akarok ellenőrizni, akkor mondjuk legenerálok kellő számú chunkot, azokat névsorba rendezem, majd egyformákat keresek köztük.

csak intuitív módon tudom mondani, de ezek az ellenőrzések nagyon nagy lassító tényezőnek tűnnek nekem. aki tud programozni, az megírja a sortot, és felhasználom, de nem akarok saját magamnak lassú és nem verifikált kódot gányolni.