it-swarm.com.de

Zeichenfolgen mit Zahlen in Bash sortieren

Ich wollte schon oft Zeichenfolgen mit Zahlen sortieren, damit beim Sortieren von z. abc_2, abc_1, abc_10 Das Ergebnis ist abc_1, abc_2, abc_10. Jeder Sortiermechanismus, den ich als abc_1, abc_10, abc_2 Gesehen habe, ist Zeichen für Zeichen von links.

Gibt es eine effiziente Methode zum Sortieren, um das gewünschte Ergebnis zu erzielen? Die Idee, jedes Zeichen zu betrachten, festzustellen, ob es sich um eine Zahl handelt, eine Teilzeichenfolge aus nachfolgenden Zahlen zu erstellen und diese als Zahl zu sortieren, ist zu schrecklich, um sie in bash zu betrachten.

Hat kein bärtiger * nix-Guru eine alternative Version von sort mit der Option --sensible_numerical Implementiert?

54
hardcode57

Führen Sie dies aus

sort -t _ -k 2 -g data.file
  • -t Trennzeichen
  • -k Schlüssel/Spalte
  • -g allgemeine numerische Sortierung
104
Grzegorz Żur

Ich denke das ist eine GNU Erweiterung zu sort, aber du suchst nach dem --version-sort (oder -V) Möglichkeit:

$ printf "prefix%d\n" $(seq 10 -3 1)
prefix10
prefix7
prefix4
prefix1

$ printf "prefix%d\n" $(seq 10 -3 1) | sort
prefix1
prefix10
prefix4
prefix7

$ printf "prefix%d\n" $(seq 10 -3 1) | sort --version-sort
prefix1
prefix4
prefix7
prefix10

https://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html

36
glenn jackman

Versuche dies

$ cat a.txt
abc_1
abc_4
abc_2
abc_10
abc_5

$ sort -V a.txt
abc_1
abc_2
abc_4
abc_5
abc_10
26
Bill