Zufällig mischen Zeilen in Linux / Bash
Ich habe einige Dateien in linux. Für Beispiel 2 und ich brauche das mischen der Dateien in einer Datei.
Beispielsweise
$cat file1
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
und
$cat file2
linea one
linea two
linea three
linea four
linea five
linea six
linea seven
linea eight
Und später, dass ich mischen die beiden Dateien, die ich erhalten kann, so etwas wie:
linea eight
line 4
linea five
line 1
linea three
line 8
linea seven
line 5
linea two
linea one
line 2
linea four
line 7
linea six
line 1
line 6
- möglich, Duplikat der Wie kann ich schieben Sie die Zeilen einer text-Datei im Unix-Kommandozeile?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie verwenden
shuf
Befehl =)Oder mit Perl :
Art: (ähnlich wie die Linien zusammen gestellt werden)
Shuf:
Perl:
BASH:
Awk:
sort -R
für diese Aufgabe, es sei denn, Sie sind sicher, dass alle Zeilen eindeutig ist (siehe mein Kommentar zu Kent ' s Antwort).shuf
am besten abschneidet, gefolgt von derperl
Lösung; dieawk
Lösung, zwar deutlich langsamer, hat den Vorteil, dass Sie POSIX-konform.sort -R
, wie bereits erwähnt, ist kein echtes shuffle, und auch ganz langsam, mit großen Eingang. Mit einembash
Schleife am langsamsten ist bei weitem, und auch hier behindert von nur produziert eine max. von 32.768 zufällige Werte. Siehe hier für eine detailliertere performance-Vergleich.Nur ein Hinweis zu OS X-Benutzer, die mit MacPorts: die
shuf
Befehl ist Teilcoreutils
und installiert ist, unter dem Namengshuf
.brew install coreutils
Hier ist ein one-liner, die sich nicht auf
shuf
odersort -R
), welche ich nicht habe auf meinem mac:Diese iteriert über alle Zeilen, die in
my_file
und Nachdrucke Ihnen in einer randomisierten Reihenfolge.Brauchen Sie nicht zu verwenden, Rohre hier. Sortieren alleine tut dies mit den Datei(en) als Parameter. Würde ich nur tun,
oder wenn Sie mehrere Dateien
Ich würde
shuf
zu.weitere option, gnu sort hat:
könnten Sie versuchen:
sort -R
Methode: ähnlich wie die Linien zusammen gestellt werden (versuchen Sie es mit, z.B., zweimal die gleiche Datei, Sie werden überrascht sein).Dieser arbeitete für mich. Mit dem Fisher-Yates-shuffle.
Es ist klar voreingenommen rand (wie die Hälfte der Zeit die Liste beginnt mit der ersten Zeile) aber für einige grundlegende Randomisierung nur mit bash gelieferten ich denke, es ist in Ordnung? Drucken Sie einfach jede Zeile ja/Nein drucken Sie dann den rest...