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.


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.


10

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

sort -t = -k 2n

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


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

-1

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


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нιη
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.