sort zeigt etwas unerwartes für mich, warum ?

Hinweis: In dem Thema sort zeigt etwas unerwartes für mich, warum ? gibt es 18 Antworten auf 2 Seiten. Der letzte Beitrag () befindet sich auf der letzten Seite.
  • Guten Tag,


    wenn ich den Befehl ausführe:

    Code
    thierry@localhost:~> ls -l /usr/bin/ | sort -nrk 5 | head -n 30


    erwarte ich, der Output wird absteigend und numerisch nach dem 5 Feld sortiert.

    Aber ich bekomme:

    Warum sind die Dateien 'mariabackup' und 'gdb' so sortiert ?


    Ich habe bemerkt, die Tagesnummer von 'mariabackup' und 'gdb' enthalten nur eine Zahl.


    Danke für Ihre Hilfe.

    Für den Inhalt des Beitrages 287441 haftet ausdrücklich der jeweilige Autor: denebe

  • Ist mit deinem Prompt alles OK? Mir gefällt nicht

    Code
    thierry@localhost:~>

    localhost ??

    Das Problem hatten wir hier Benutzer/Host Probleme, aber ich kann irren :)

    Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt. Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

    Für den Inhalt des Beitrages 287442 haftet ausdrücklich der jeweilige Autor: Heinz-Peter

  • Hallo,


    Kleiner Versuch:

    Code
    ls -S /usr/bin

    Vielleicht bringt das schon ein erwünschtes Ergebnis? (Die Option -S sortiert nach Dateigröße. Wenn Du die detaillierte Ausgabe haben möchtest, kannst Du noch das -l dazugeben). Ansonsten kann man noch einiges mit awk probieren.

    Die Felder werden nicht immer gleich definiert, manchmal wird das erste Feld als "0" bezeichnet, manchmal mit "1". Wenn Du bei sort die Optionen zusammenfasst, kann das zu Missverständnissen führen. Kann sein, dass sort in irgendeinem Feld nach dem 5. Zeichen suchte. Einzeln angeben, so dass klar ist, worauf sich die "5" bezieht. Vielleicht auch mal die Manpage von sort ansehen?


    Herzlichst, Gisela

    Für den Inhalt des Beitrages 287443 haftet ausdrücklich der jeweilige Autor: giff

  • ... erwarte ich, der Output wird absteigend und numerisch nach dem 5 Feld sortiert.

    Bei mir funktioniert es richtig -- auch mit einstelligen Tagesnummern. Um einen Fehler durch die Akzente auszuschließen könntest Du mal

    Code
    LANG=C ls -l /usr/bin/ | sort -nrk 5 | head -n 30

    probieren.

    Für den Inhalt des Beitrages 287446 haftet ausdrücklich der jeweilige Autor: Welm

  • Hallo,


    es klappt mit der Option -S .


    Aber weil ich das Thema 'sort -nrk 5' aus einem Buch übe, weil ich gerade mit diesem Buch lerne, bleibe ich auf den Befehl 'sort -nrk 5' konzentriert und probiere weiter zu begreifen was passiert.


    Ich denke, der zweite Teil deiner Antwort ist von Bedeutung, also dass 'sort' in irgendeinem Feld nach dem 5. Zeichen suchte.

    Ich entwickle weiter meine Antwort unten (um nicht zwei Male das selbe zu schreiben)…

    Für den Inhalt des Beitrages 287447 haftet ausdrücklich der jeweilige Autor: denebe

  • Bei mir funktioniert es richtig -- auch mit einstelligen Tagesnummern. Um einen Fehler durch die Akzente auszuschließen könntest Du mal

    Code
    LANG=C ls -l /usr/bin/ | sort -nrk 5 | head -n 30

    probieren.

    Hallo,


    es funktioniert. Aber ich ziehe in Zweifel, dass es mit Akzenten zu tun hat (ich hatte eigentlich auch daran gedacht) , sondern mehr mit dem Folgenden Feld.


    Der alte Befehl ls -l /usr/bin/ | sort -nrk 5 | head ergibt:

    Mit LANG=C ls -l /usr/bin/ | sort -nrk 5 | head :

    Die Daten beginnen nun mit Buchstaben, nicht mehr mit der Tagesnummer. Es ergibt sich, meiner Meinung nach, dass 'sort' nur das Feld 5 in Betracht zieht zum sortieren.


    ======================================

    Wie giff (Gisela) erwähnt hat, suchte 'sort -n' nach den nächsten Feldern, wenn sie Zahlen enthalten.


    Ich habe eine kleine (nicht sehr :) ) vom oben genannten Beispiel unabhängige Datei erzeugt, die ausschließlich Zahlen enthält.


    Die Datei heißt: tri_sort.txt

    Dann habe ich ohne und mit 'LANG=C' sortiert


    1. tri_sort.txt

    2. sort -nr tri_sort.txt

    3. LANG=C sort -nr tri_sort.txt

    Obwohl die Ergebnisse (bei mir) von 'sort -nr' ohne oder mit 'LANG=C' unterschiedlich sind, ist es festzustellen, dass 'sort -n', ohne oder mit 'LANG=C', alle Zahlen und alle Blanks irgendwie behandelt.


    Zusammenfassend muss man mit 'sort -n' sehr vorsichtig sein…


    Bemerkungen:

    der folgende Befel funktioniert bei mir:

    Code
    ls -l /usr/bin/ | sort -k5,5nr | head

    oder der Befehl (mit -g anstatt -n):

    Code
    thierry@localhost:~> ls -l /usr/bin/ | sort -grk 5 | head

    PS: ich probiere heute Abend mit meinem anderen Computer (Alle ist auf Deutsch konfiguriert). Er ist zurzeit wegen Home-Office von meiner Freundin besetzt

    3 Mal editiert, zuletzt von denebe ()

    Für den Inhalt des Beitrages 287448 haftet ausdrücklich der jeweilige Autor: denebe

  • Hmmm ...


    die Beispieldatei ist etwas unpraktisch denn Zeilen wie


    Code
    00 1
    0  1
    0 0 0
    0 01

    dürfen in beliebiger Reihenfolge ausgegeben werden. Solange erst die 100er, dann die 11er, dann die 10er, dann die 1er und dann die 0er kommen, darf alles ansonsten beliebig zufällig sortiert sein. LANG=C sollte daran nichts ändern (es war nur für das "ls" gedacht).


    "sort -nr tri_sort.txt" liefert aber definitiv was Falsches (11 kommt nach 10). Bei mir kommt es richtig raus.


    Sehen wir mal nach, welches "sort"-Programm da läuft: bei mir stammt es aus dem normalen "coreutils"-Paket.


    Für den Inhalt des Beitrages 287453 haftet ausdrücklich der jeweilige Autor: Welm

  • Bei mir, rpm -qif /usr/bin/sort :

    locale:

    Für den Inhalt des Beitrages 287455 haftet ausdrücklich der jeweilige Autor: denebe

  • Wenn bei Dir "type sort" auch "/usr/bin/sort" angibt fällt mir erstmal nichts mehr ein warum sich die Programme verschieden benehmen... :(

    Für den Inhalt des Beitrages 287456 haftet ausdrücklich der jeweilige Autor: Welm

  • hmm.. das ist alles komisch. Die Sortierung scheint mit den Spalten durcheinander zu kommen. Allerdings müsste dann ja auch der "-k5,5nr" Zusatz fehlschlagen, was ja nicht der Fall ist (diesen Ansatz finde ich übrigens sauberer/konkreter).

    Was ergibt bei Dir die Ausgabe:

    Code
    ls -l /usr/bin/ | sort --debug -nrk 5 | head -n 60

    gern auch mal ein --debug für die beiden Sortierungen deiner Datei. (die Datei ist UTF-8 oder?)


    Tatsächlich gab/gibt(?)) es einen Bug in Zusammenhang mit Sonderzeichen:

    https://lists.gnu.org/archive/…ils/2020-08/msg00019.html


    Ich sehe aber keine Zusammenhang zum Problem mit dem Beispiel Deiner Datei. (es sei denn, dass da was grundsätzlich beim verarbeiten von utf8-regeln ( <>LANG=C) schief geht/ging.


    Ich konnte das nicht bei mir nachstellen:

    Für den Inhalt des Beitrages 287461 haftet ausdrücklich der jeweilige Autor: r3z5