[gelöst] sort - sortieren NUR nach key

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
Antworten
TuxPeter
Beiträge: 1962
Registriert: 19.11.2008 20:39:02
Lizenz eigener Beiträge: MIT Lizenz

[gelöst] sort - sortieren NUR nach key

Beitrag von TuxPeter » 20.11.2020 19:32:32

Hallo Debianfreunde,

ich habe hier einen Arduino, der mir verschiedenen Messwerte liefert, zur Unterscheidung und Zuordnung ist ein Buchstabe vorangestellt. Also etwa so:

Code: Alles auswählen

a 5
b 3
b -2
a 2
b 4
a 7
Was ich haben will, ist natürlich /a 5 / a 2 / a 7/ b 3/ usw., d.h. es soll NUR nach dem ersten Feld bzw. 1. Zeichen sortiert werden. Was immer ich aber anstelle mit sort -k 1,1 ... oder sort -k1.1,1 ... es wird immer der ganze Satz sortiert, d.h. es kommt immer / a 2 / a 5 / usw. Abhilfe wäre natürlich, das Arduino-Programm zu ändern und die Satzart hintenan zu stellen, dann geht es. Ist aber aus anderen Gründen nicht sinnvoll
Ich habe dann, um auf die Schnelle zu Ergebnissen zu gelangen das Ganze in gnumeric geladen und dort nach dem 1. Tabellenfeld sortiert und wieder exportiert - geht, ist aber echt EDV zu Fuß. Dann ist mir eingefallen, ein kleines Script zu schreiben, in dem z.B. alle Werte mit mit "a" vorne herausgepickt werden und per echo eine eigene Datei umgeleitet, das geht auch ist ist für meine Anwendung vielleicht sogar noch besser - aber mich plagt die Frage warum und ob es mit dem sort nicht geht. Oder habe ich voll auf dem Schlauch gestanden?

MfG, TuxPeter
Zuletzt geändert von TuxPeter am 20.11.2020 20:55:10, insgesamt 1-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: sort - sortieren NUR nach key

Beitrag von Meillo » 20.11.2020 20:01:15

Verwende `-s'.
Use ed once in a while!

TuxPeter
Beiträge: 1962
Registriert: 19.11.2008 20:39:02
Lizenz eigener Beiträge: MIT Lizenz

Re: sort - sortieren NUR nach key

Beitrag von TuxPeter » 20.11.2020 20:54:39

Danke für die schnelle Antwort!
sort -sk 1,1 ... tut es.

Schönen Abend noch!

Edit: Es ist ja nicht so, dass ich nicht ins man geschaut hätte. Aber:
-s, --stable
Sortierung stabilisieren, indem der Rückzugsvergleich deakti‐
viert wird
- versteh' ich nicht, kann es auch nicht sein, dachte ich.


Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: sort - sortieren NUR nach key

Beitrag von Meillo » 20.11.2020 21:12:34

EDIT: tobo war schneller ... ich dafuer ausfuerlicher. :-P

TuxPeter hat geschrieben: ↑ zum Beitrag ↑
20.11.2020 20:54:39
Edit: Es ist ja nicht so, dass ich nicht ins man geschaut hätte. Aber:
-s, --stable
Sortierung stabilisieren, indem der Rückzugsvergleich deakti‐
viert wird
- versteh' ich nicht, kann es auch nicht sein, dachte ich.
Den zweiten Satzteil finde ich auch sehr seltsam und auch ich habe keine wirklich Vorstellung davon, was das heissen soll. (Insofern wuerde ich das als schlechte Doku, im Sinne von nicht anwenderfreundlich, werten. Bei GNU-Utilities steckt die eigentlich Doku in der Info-Page, vielleicht steht dort mehr dazu.)

Ich weiss halt, dass es Sortieralgorithmen gibt, die ``stabil'' sind, d.h. dass sie bei Wertgleichheit die Ursprungsreihenfolge erhalten. Quicksort, das sehr verbreitet ist (in der C-Standardbibliothek als qsort(3) verfuegbar) gehoert nicht dazu. Es muss dann ein anderer Sortieralgorithmus verwendet werden, darum die Existenz eines Switches. Der Begriff ``stable'' hat dann beim Lesen der Manpage die noetige Verknuepfung bei mir erzeugt. Soviel zur Erklaerung.


Im Uebrigen kennt POSIX kein `-s', hat aber folgendes als Erlaeuterung:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sort.html hat geschrieben: Implementations are encouraged to perform the recommended further byte-by-byte comparison of lines that collate equally, even though this may affect efficiency. The impact on efficiency can be mitigated by only performing the additional comparison if the current locale's collating sequence does not have a total ordering of all characters (if the implementation provides a way to query this) or by only performing the additional comparison if the locale name associated with the LC_COLLATE category has an '@' modifier in the name (since locales without an '@' modifier should have a total ordering of all characters - see XBD LC_COLLATE). Note that if the implementation provides a stable sort option as an extension (usually -s), the additional comparison should not be performed when this option has been specified.
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [gelöst] sort - sortieren NUR nach key

Beitrag von Meillo » 20.11.2020 21:28:55

Hier die Erklaerung was mit ``last-resort comparison'' gemeint ist:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sort.html hat geschrieben: If this collating sequence does not have a total ordering of all characters (see XBD LC_COLLATE), any lines of input that collate equally should be further compared byte-by-byte using the collating sequence for the POSIX locale.
Use ed once in a while!

Antworten