Dies sind die Daten, die ich sortieren möchte. Aber sort
behandelt den numerischen String, die Daten werden nicht wie erwartet sortiert.
/ home / files / profile1
/ home / files / profile10
/ home / files / profile11
/ home / files / profile12
/ home / files / profile14
/ home / files / profile15
/ home / files / profile16
/ home / files / profile2
/ home / files / profile3
/ home / files / profile4
/ home / files / profile5
/ home / files / profile6
/ home / files / profile7
/ home / files / profile8
/ home / files / profile9
Ich möchte das sortieren,
/ home / files / profile1
/ home / files / profile2
/ home / files / profile3
/ home / files / profile4
/ home / files / profile5
/ home / files / profile6
/ home / files / profile7
/ home / files / profile8
/ home / files / profile9
/ home / files / profile10
/ home / files / profile11
/ home / files / profile12
/ home / files / profile14
/ home / files / profile15
/ home / files / profile16
Gibt es einen guten Weg mit dem Bash-Skript? Ich kann hier kein Ruby- oder Python-Skript verwenden.
quelle
sort -V
würdest du.Antworten:
Sie können ein temporäres Sentinel-Zeichen verwenden, um die Anzahl zu begrenzen:
Hier ist das Sentinel-Zeichen ';' - Es darf nicht Teil eines Dateinamens sein, den Sie sortieren möchten - Sie können jedoch das ';' mit jedem Charakter, den Sie mögen. Sie müssen das ändern
sed
,sort
undtr
Teil dann entsprechend.Die Pipe funktioniert wie folgt: Der
sed
Befehl fügt den Sentinel vor einer beliebigen Zahl ein, dersort
Befehl interpretiert den Sentinel als Feldbegrenzer, sortiert mit dem zweiten Feld als numerischen Sortierschlüssel und dertr
Befehl entfernt den Sentinel wieder.Und
log
bezeichnet die Eingabedatei - Sie können Ihre Eingabe auch weiterleitensed
.quelle
Dies ist dieser Frage sehr ähnlich . Das Problem ist, dass Sie ein alphanumerisches Feld haben, nach dem Sie sortieren, und
-n
das nicht vernünftig behandeln, wie es version sort (-V
) tut. Also benutze:Beachten Sie, dass diese Funktion derzeit von den GNU-, FreeBSD- und OpenBSD-Sortierimplementierungen unterstützt wird.
quelle
sort -V
nichtsort -v
. Es ist auf den ersten Blick schwer zu sagen.Wenn alle Dateinamen vor dem letzten numerischen Teil dasselbe Präfix haben, ignorieren Sie es beim Sortieren:
(20 ist die Position der ersten Ziffer. Es ist eins plus die Länge von
/home/files/profile
.)Wenn Sie mehrere verschiedene nicht numerische Teile haben, fügen Sie einen Sentinel ein .
quelle