Shuf: Alea iacta est

  Ralf Hersel   Lesezeit: 2 Minuten  🗪 9 Kommentare Auf Mastodon ansehen

Ein kleiner Befehl, der Freude macht. Ob Lottotipp, Würfeln oder Namensfindung: shuf kann das.

shuf: alea iacta est

Obwohl ich seit 20 Jahren GNU/Linux-Systeme verwende, bietet die Kommandozeile immer wieder ein Füllhorn an Überraschungen und Neuentdeckungen. Zugegeben – das ist ein kurzer Artikel mit wenig Blabla. Wahrscheinlich frisst das Titelbild mehr Speicherplatz, als der gesamte Text. Aber egal – mir hat meine neueste Entdeckung gefallen und deshalb teile ich sie mit euch.

Wie die Lateiner unter den Lesern wissen, stand Iulius Caesar am 10. Januar 49 v. Chr. mit seiner Armee vor der Überquerung des Grenzflusses Rubikon. Nach einigem Zögern und Zaudern, sagte er:

Dorthin gehe es, wohin der Götter Zeichen und der Feinde Unrecht ruft. Geworfen ist der Würfel (alea iacta est).

Damit machte Caesar deutlich, dass seine Tat unwiderruflich Folgen haben würde, deren Ausgang jedoch noch nicht absehbar war.

Ganz so dramatisch geht es bei der Verwendung des CLI-Befehls shuf nicht zu. Aber praktisch ist er. Mit diesem Befehl generiert man zufällige Permutationen. Grämt euch nicht, wenn ihr nicht mehr wisst, was Permutationen sind. Hier sind ein paar Beispiele, um die Nützlichkeit des Befehls zu zeigen. Öffnet ein Terminal und macht es nach.

Der Lottotipp

shuf -n 6 -i 1-49

5
3
14
42
47
35

shuf steht für shuffle, also mischen. Im obigen Beispiel wird der Befehl mit zwei Argumenten aufgerufen: -n für die Anzahl (6 Zahlen) und -i für das Intervall (Zahlen zwischen 1 und 49).

Zwei Würfel

shuf -n 2 -i 1-6

2
4

Da gibt es nicht viel zu erklären: zwei Zahlen zwischen 1 und 6.

Nachtrag: Es gibt doch viel zu erklären. Lest das bitte in den Kommentaren nach, damit ich es hier nicht wiederholen muss. Der korrekte Würfelbefehl lautet:

shuf -r -n 2 -i 1-6

Wie sollen meine Neugeborenen heissen?

shuf -n 3 namen.txt 

Sophie
Marlon
Lara

Die beliebtesten Vornamen für das Jahr 2025 findet ihr hier. Diese kopiert ihr in die Datei namen.txt und lasst shuf entscheiden, wie euer Nachwuchs heissen soll. Das ist ein wenig nerdig, aber: Alea iacta est!

Titelbild: https://pixabay.com/photos/dice-gambling-gamble-risk-3116778/

Quellen:

https://de.wikipedia.org/wiki/Alea_iacta_est

https://www.mankier.com/1/shuf

https://www.vorname.com/beliebte_vornamen,0.html

Tags

cli, CLI-Befehle, shuffle, shuf, Würfeln

David
Geschrieben von David am 10. September 2025 um 09:44

Ich fürchte das mit den Namen hat leider einen eher geringen WAF...

Peter
Geschrieben von Peter am 10. September 2025 um 10:50

À propos nerdig: shuf kann auf die beschriebene Art nicht zwei Würfel ersetzen. Am leichtesten zeigt sich dass, wenn versucht wird, sieben Würfel zu simulieren. Pasch-Würfe sind z.b. mit for i in zwei mal; do echo -n $(( 1 + $RANDOM % 6 )) " "; done nicht ausgeschlossen.

Frank
Geschrieben von Frank am 10. September 2025 um 10:54

shuf liefert n zufällige elemente aus dem interval i.

damit ist shuf für die lottozahlen geeignet, denn es werden 6 elemente aus dem interval 1-49 ausgewählt.

aber shuf ist nicht für das würfeln geeignet: shuf -n 2 -i 1-6 liefert zwei elemente aus dem intervall 1-6. beim würfeln könnte es auch zu zwei gleichen elementen auf beiden würfeln kommen, nämlich zweimal eins oder zweimal zwei, usw. diese ergebnisse liefert shuf nicht.

man kann mit einen würfel auch 10 mal würfeln, das müsste bei shuf also shuf -n 10 -i 1-6 sein. das funktioniert aber nicht da shuf nur maximal die 6 elemente aus der menge von 1-6 liefert.

also vorsichtig mit shuf. es ist kein würfel ersatz, sondern nur eine auswahl aus n elemente aus einem interval, wobei keine doppelten ergebnisse vorkommen können.

Ralf Hersel Admin
Geschrieben von Ralf Hersel am 10. September 2025 um 11:14

Stimmt. Danke. Dann eben so:

repeat 2 shuf -n 1 -i 1-6

Das funktioniert zumindest in der Z-Shell.

Naja
Geschrieben von Naja am 10. September 2025 um 14:15

RTFM! (Das ich das nochmal schreiben darf :-D)

Das bringt shuf doch schon mit, mit der Option -r, --repeat: shuf -r -n 2 -i 1-6

s. man shuf

Ralf Hersel Admin
Geschrieben von Ralf Hersel am 10. September 2025 um 14:55

Aha. Somit taugt shuf doch als Würfel. Im Gegensatz zu meinem repeat, wiederholt der Parameter -r nicht den Befehl, sondern erlaubt sich wiederholende Ausgaben, was man gut am 7-er Beispiel sehen kann:

shuf -r -n 7 -i 1-6

Frank
Geschrieben von Frank am 10. September 2025 um 17:47

Asche auf mein Haupt.... Wer die manpages lesen kann, ist klar im Vorteil.

jedenfalls dank an ralf für die vorstellung. ich kannte die funktion bis jetzt noch nicht.

Karl Brandt
Geschrieben von Karl Brandt am 10. September 2025 um 11:05

Dadurch wird mein Lottozahlengenerator völlig überflüssig. Ich kannte shuf noch nicht. Irre was es alles gibt.

Robert
Geschrieben von Robert am 10. September 2025 um 20:00

Das kannte ich auch noch nicht, ist sozusagen das gleichzeitig das Gegenteil von sort und uniq, wobei ich zugegebenermaßen wenig Anwendung für shuf finden werde.