sort: fix -kN,M handling (was including last separator into the comparison)
No binary (build failed)
—
(log yok)
| @@ -25,14 +25,14 @@ | |
| //usage: "\n -f Ignore case" | |
| //usage: "\n -g General numerical sort" | |
| //usage: "\n -i Ignore unprintable characters" | |
| - | //usage: "\n -k Sort key" |
| //usage: "\n -M Sort month" | |
| //usage: ) | |
| + | //-h, --human-numeric-sort: compare human readable numbers (e.g., 2K 1G) |
| //usage: "\n -n Sort numbers" | |
| //usage: IF_FEATURE_SORT_BIG( | |
| //usage: "\n -o Output to file" | |
| - | //usage: "\n -k Sort by key" |
| - | //usage: "\n -t CHAR Key separator" |
| + | //usage: "\n -t CHAR Field separator" |
| + | //usage: "\n -k N[,M] Sort by Nth field" |
| //usage: ) | |
| //usage: "\n -r Reverse sort order" | |
| //usage: IF_FEATURE_SORT_BIG( | |
| @@ -143,6 +143,9 @@ static char *get_key(char *str, struct sort_key *key, int flags) | |
| } | |
| } | |
| } | |
| + | /* Remove last delim: "abc:def:" => "abc:def" */ |
| + | if (key_separator && j && end != 0) |
| + | end--; |
| } | |
| if (!j) start = end; | |
| } | |
| @@ -163,7 +166,8 @@ static char *get_key(char *str, struct sort_key *key, int flags) | |
| if (start > len) start = len; | |
| } | |
| /* Make the copy */ | |
| - | if (end < start) end = start; |
| + | if (end < start) |
| + | end = start; |
| str = xstrndup(str+start, end-start); | |
| /* Handle -d */ | |
| if (flags & FLAG_d) { | |
| @@ -98,6 +98,14 @@ testing "sort with non-default leading delim 3" "sort -n -k3 -t/ input" "\ | |
| //b/1 | |
| " "" | |
| + | testing "sort with non-default leading delim 4" "sort -t: -k1,1 input" "\ |
| + | a:b |
| + | a/a:a |
| + | " "\ |
| + | a/a:a |
| + | a:b |
| + | " "" |
| + | |
| testing "sort -u should consider field only when discarding" "sort -u -k2 input" "\ | |
| a c | |
| " "\ | |