Dieses `--debug' ist ja richtig hilfreich!
Mein sort (aus den Coreutils 8.14) hat uebrigens doch ein `--debug'. Hatte bloss vergessen, dass ich (aus irgendwelchen ebenso vergessenen Gruenden) das Heirloom sort davor im Pfad habe.
tobo hat geschrieben: 24.08.2020 21:47:36
In t.txt sind die kopierten Beispieldaten. Bei mir greift der Monat erst mit Zeichen 12, der Cursor zeigt auf das =-Zeichen. Die voranstehenden Leerzeichen haben Relevanz, wie die Fehlermeldung vermuten lässt. Setze ich noch ein weiteres Leerzeichen vor Feld 2 (in t.txt) dann wandert der Cursor auch vor das =-Zeichen.
Hier nun des Raetsels Loesung:
Code: Alles auswählen
B-) sed q in2 | LC_DATE=C /usr/bin/sort --debug -k5n,5 -k2.1M,2 -k3n,4
/usr/bin/sort: using `en_US.UTF-8' sorting rules
/usr/bin/sort: key 3 is numeric and spans multiple fields
ba.de :notAfter=Oct 21 15:59:04 2020 GMT
____
^ no match for key
__
________________________________________
B-) sed q in2 | LC_DATE=C /usr/bin/sort --debug -k5n,5 -k2.2M,2 -k3n,4
/usr/bin/sort: using `en_US.UTF-8' sorting rules
/usr/bin/sort: leading blanks are significant in key 2; consider also specifying `b'
/usr/bin/sort: key 3 is numeric and spans multiple fields
ba.de :notAfter=Oct 21 15:59:04 2020 GMT
____
^ no match for key
__
________________________________________
B-) sed q in2 | LC_DATE=C /usr/bin/sort --debug -k5n,5 -k2.2bM,2 -k3n,4
/usr/bin/sort: using `en_US.UTF-8' sorting rules
/usr/bin/sort: key 3 is numeric and spans multiple fields
ba.de :notAfter=Oct 21 15:59:04 2020 GMT
____
^ no match for key
__
________________________________________
Wenn ich vom ersten zum zweiten Zeichen wechsle, dann wird ploetzlich der leading Whitespace relevant. Wenn ich den dann mit `b' ignoriere, tut es wie es soll.
(Warum aber `-k2.1M,2' auf den Doppelpunkt zeigt und nicht auf den Space davor, ist mir noch unverstaendlich.)
(Auch nicht verstehe ich, warum ein `-b' als erste Option nicht auf alle Sortierfelder wirkt, wie in POSIX beschrieben. Bei mir klappt's nur wenn ich es bei jedem relevanten Feld angebe.)
Hier POSIX:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sort.html hat geschrieben:
-b Ignore leading <blank> characters when determining the starting and ending
positions of a restricted sort key. If the -b option is specified before
the first -k option, it shall be applied to all -k options. Otherwise, the
-b option can be attached independently to each -k field_start or field_end
option-argument (see below).
[...]
A field comprises a maximal sequence of non-separating characters and,
in the
absence of option -t, any preceding field separator.
[...]
If the -b option or b type modifier is in effect, characters within a field
shall be counted from the first non- <blank> in the field. (This shall apply
separately to first_character and last_character.)
Also, nochmal in verstaendlicheren Worten: Wenn man den Default-Separator verwendet (= beliebiger Whitespace), dann ist dieser Separator-Whitespace Teil des Feldes wenn man Character-Positionen verwendet! Mit `-b' bzw. `b' verhindert man das.
Vermutlich sollte man stets `-b' verwenden, weil das zumeist eher gewollt sein wird.
(Irgendwie kommt mir das nun etwas bekannt vor ... wie wenn wir genau den Fall hier vor ein paar Jahren schonmal gehabt haetten ...
)