Ich weiß, dass ich damit seq
eine zufällige Liste von Zahlen erstellen kann: 1, 2, 3, 4 ...
Ich möchte diese Zahlen in eine zufällige Reihenfolge wie 3, 1, 4, 2 bringen ...
Ich weiß, dass ich damit shuf
die Zeilen einer Datei mischen kann. Ich könnte also seq
Zufallszahlen in eine Datei schreiben und sie dann shuf
mischen - oder eine Art Zufallsfunktion schreiben. Dies scheint jedoch unnötig komplex zu sein. Gibt es eine einfachere Möglichkeit, die Elemente in einem Array mit einem einzigen Befehl zufällig zu sortieren?
command-line
seq
bernie2436
quelle
quelle
echo $(seq 10 | shuf)
kommt nahe, macht aber keine Kommas.paste
...paste
nicht, dass ich das getan habe. Danke, dass du mich unterrichtet hast. Habe eine Gegenstimme.join
und anpaste
. Diese 2 Werkzeuge sind extrem leistungsfähig.Angenommen, Sie haben ein Array von Dezimalzahlen:
Sie können die Elemente des Arrays verwenden
printf
undshuf
zufällig sortieren:(oben wird davon ausgegangen, dass Sie nicht geändert haben
$IFS
).Wenn Sie nur Zufallszahlen zwischen zwei Ganzzahlen benötigen, z. B.
10
und20
, benötigen Sie keine zusätzlichen Prozesse außershuf
der Verwendung der folgenden-i
Option:Zitat aus
man shuf
:quelle
shuf --help
aber ich habe versucht,shuf -i 1 10
ohne die Intervention zu verwenden-dash.
, na ja, gute Arbeit - habe meine Gegenstimme.Sie brauchen nicht einmal eine
for
Schleife.AUSGABE
Um sie in ein Shell-Array zu bekommen, gehen Sie wie folgt vor:
AUSGABE
Und dann sind sie in Ihrem Shell-Array.
Wenn Sie sie in das Shell-Array aufnehmen, benötigen Sie nicht einmal
printf
:AUSGABE
Übrigens
seq
undprintf
sind irgendwie füreinander gemacht. Zum Beispiel, wenn ich eine Zeichenfolge 1000 Mal wiederholen möchte?AUSGABE
... 999
a string
Zeilen später ...Oder...
AUSGABE
Ich möchte 39 Mal einen Befehl ausführen?
AUSGABE
... 38
run
Zeilen später ...quelle
Sie können den
shuf
Befehl verwenden, um die Ausgabe zufällig zu sortieren, zquelle
POSIXly, um eine gemischte Liste der Dezimalzahlen von
min
bis zu generierenmax
:Beachten Sie, dass bei vielen awk-Implementierungen das zweimalige Ausführen dieses Befehls innerhalb derselben Sekunde das gleiche Ergebnis liefert (als
srand()
Startwert für den Pseudozufallsgenerator basierend auf der aktuellen Zeit).quelle