Ich habe eine durch Kommas getrennte Datei, die so aussieht:
100,00869184
6492,8361
1234,31
200,04071
Ich möchte sort
diese Datei nur nach der ersten Spalte numerisch sortieren .
Erwünschtes Ergebnis:
100,00869184
200,04071
1234,31
6492,8361
Wie erreiche ich das mit sort? Es scheint, als würden die Kommas wie Tausendertrennzeichen anstatt Trennzeichen behandelt, selbst wenn ich sie als solche bezeichne.
Beides sort -t',' -n
und sort -t',' -nk1'
gib mir das:
1234,31
200,04071
6492,8361
100,00869184
Das Sortieren nach Standard (keine Parameter) oder Verwenden von sort -t','
gibt mir Folgendes:
100,00869184
1234,31
200,04071
6492,8361
Wenn sort -n
ich nach einer Zahl sortiere, sehe ich Folgendes:
1234,31
200,04071
6492,8361
100,00869184
Wie kann ich sort verwenden, um das gewünschte Ergebnis zu erzielen?
Bearbeitet, um hinzuzufügen: Dies ist für eine einmalige Operation zum Erstellen einer sortierten Liste von ungefähr 7 Millionen Zeilen vorgesehen, sodass Problemumgehungen oder andere unorthodoxe Methoden durchaus akzeptabel sind.
-t
Option zu zeigen , ein Leerzeichen zwischen dem-t
und dem Charakter zu habenAntworten:
Dies ist sicherlich eine schmutzige Umgehung, aber ich habe einen Weg gefunden, dies zu tun, dank @ slhcks Tipp zu Gebietsschemas. Wenn eine bessere Antwort kommt, die für andere hilfreicher wäre, werde ich sie mit Sicherheit akzeptieren, da dies so ziemlich nur für mein spezifisches Problem funktioniert.
Ich habe das Gebietsschema auf Spanisch (Bolivianisch) gesetzt, damit die Kommas wie Dezimalstellen behandelt werden. Dann hat die standardmäßige numerische Sortierung den Trick getan.
quelle
GNU's
sort
macht dies standardmäßig:Ausführung:
Es gibt jedoch eine Einschränkung: Wenn Ihre Sortierung nicht wie erwartet funktioniert, ist Ihre
locale
Einstellung wahrscheinlich anders alsC
. Warum ist das?locale
Definiert die Sortierung und Interpretation von Buchstaben, Zahlen, Dezimalzeichen usw.Um dies zu überprüfen, geben Sie einfach
locale
ein Terminal ein. IstLC_NUMERIC
gesetzten_US.UTF-8
, vielleicht? Dies würde die falsche Sortierreihenfolge erklären. Setzen Sie es zurück aufC
:Versuchen Sie dann Ihren
sort
Befehl erneut. Wenn Sie möchten , dass Ihre globale einstellenlocale
zuC
, tun dies mit:quelle
locale
Problem ist. Aber was istsort --version
eigentlich für Sie?--
Befehle haben in der Vergangenheit auch für mich nicht funktioniert. Ich habe die Manpage überprüft und es gibt keine explizit aufgerufene Version, aber es wird "HP-UX 11i Version 2: August 2003" aufgeführt, wenn dies überhaupt hilft. Meine LC_NUMERIC ist auf "C" gesetzt.,
beispielsweise als Dezimaltrennzeichen verwendet. Ich habe jedoch noch nie HP-UX verwendet.Versuchen Sie, die
-g
Option für die numerische Sortierung hinzuzufügen .Versuchen:
quelle
-n
numerische Sortierung? -g gibt mir eine illegale Option.-g
ist diegeneral-numeric-sort
Option und sollte eigentlich in jeder neueren Version von verfügbar seinsort
. @dpatcheryErsetzen Sie den Begrenzer:
- Sollte dir helfen.
quelle