Sortierbefehl unter Unix mit numerischer Sortierung

10

Ich habe Datei1:

"$lvl=57"
"$lvl=20"
"$lvl=48"
"$lvl=17"
"$lvl=58"

Datei2 Ich möchte:

"$lvl=17"
"$lvl=20"
"$lvl=48"
"$lvl=57"
"$lvl=58"

Grundsätzlich numerisch sortieren von Datei1.

Yisha
quelle
Wenn ich ein einfaches Unix sortauf Ihrer Datei1 ohne Optionen ausführe, erhalte ich Ihre Datei2. Was machst du anders Was lässt du aus dieser Frage heraus?
Scott

Antworten:

17

Ich mag -V --version-sort: Es verhält sich sehr gut für viele Situationen, in denen Zeichenfolgen und Zahlen gemischt werden

sort -V

Ich benutze diese Option sehr oft ...

In irgendeiner Richtung ls -vfür die Versionssortierung ls.

JJoao
quelle
10

Sie müssen sagen sort -n, um das Teil nach dem zu sortieren =:

sort -t = -k 2n
Stéphane Chazelas
quelle
Ich habe vor kurzem das gesucht ^^. Aber noch eine Frage: Was tun -k2n? Bezieht sich das auf die numerische Sortierung? Vielen Dank.
αғsнιη
2
@KasiyA -kdefiniert einen Sortierschlüssel. Weitere Informationen finden Sie in der Manpage. -k2nDefiniert einen Sortierschlüssel, der am zweiten Feld beginnt und am Ende der Zeile endet, und macht ihn zu einem numerischen Sortierschlüssel.
Stéphane Chazelas
0

benutze sort:

sort -n file1 > file2

-n, --numeric-sort
Vergleiche nach numerischem Wert der Zeichenfolge

 sort -g file1 > file 2

-g, --general-numeric-sort

Hackaholic
quelle
3
Nein, alle diese Zeilen haben die gleiche Rangfolge, sort -nda sie nicht mit einer Zahl beginnen. Der Grund, warum sie sortiert werden, ist die vollständige Sortierung der letzten Zeile (lexikalisch, nicht numerisch) für Zeilen mit derselben Rangfolge. Das würde "$lvl=17"vorher sortieren "$lvl=2".
Stéphane Chazelas
@ StéphaneChazelas danke für den Hinweis.
Hackaholic
Um es zu paraphrasieren -nund -gsind hier redundant, da die Eingabe nicht numerisch ist. Diese Antwort ist also irreführend, daher die Abwertung (beachten Sie auch, dass -gund die langen Optionen GNU-spezifisch sind).
Stéphane Chazelas
aber -g ist gut allgemein-numerisch-sort
Hackaholic
Das ist immer noch zum Sortieren von numerischen Werten, der Unterschied -nbesteht darin, dass es nicht auf Dezimalzahlen beschränkt ist. Das würde noch "$lvl=17"vorher "$lvl=2"als Teil der letzten Sortierung sortieren.
Stéphane Chazelas
0

Ich habe festgestellt, dass du einfach rennst sort -h, es wird funktionieren. Sie nennen es --human-numberic-sort.

sort -h file1 > file2
Vincent Pham
quelle
-1

sort -nist das, was Sie verwenden möchten. Es sortiert, während wir Zahlen sortieren.sort -k 2 -n file1

Cosmo
quelle
2
Das OP möchte jedoch in aufsteigender Reihenfolge sortieren, was die Standardeinstellung ist. Warum schlagen Sie eine umgekehrte Reihenfolge vor?
G-Man sagt "Reinstate Monica"
Das Obige ist korrekt, wenn Felder durch Tabulatoren oder Leerzeichen getrennt sind und im Fall von OP nicht funktionieren.
αғsнιη