sort: fix -kN,M handling (was including last separator into the comparison)
Testcase: $ printf '%s\n' a/a:a a:b | sort -t: -k1,1 a:b a/a:a Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
f085344d5c
commit
8aa7cf305b
@ -25,14 +25,14 @@
|
|||||||
//usage: "\n -f Ignore case"
|
//usage: "\n -f Ignore case"
|
||||||
//usage: "\n -g General numerical sort"
|
//usage: "\n -g General numerical sort"
|
||||||
//usage: "\n -i Ignore unprintable characters"
|
//usage: "\n -i Ignore unprintable characters"
|
||||||
//usage: "\n -k Sort key"
|
|
||||||
//usage: "\n -M Sort month"
|
//usage: "\n -M Sort month"
|
||||||
//usage: )
|
//usage: )
|
||||||
|
//-h, --human-numeric-sort: compare human readable numbers (e.g., 2K 1G)
|
||||||
//usage: "\n -n Sort numbers"
|
//usage: "\n -n Sort numbers"
|
||||||
//usage: IF_FEATURE_SORT_BIG(
|
//usage: IF_FEATURE_SORT_BIG(
|
||||||
//usage: "\n -o Output to file"
|
//usage: "\n -o Output to file"
|
||||||
//usage: "\n -k Sort by key"
|
//usage: "\n -t CHAR Field separator"
|
||||||
//usage: "\n -t CHAR Key separator"
|
//usage: "\n -k N[,M] Sort by Nth field"
|
||||||
//usage: )
|
//usage: )
|
||||||
//usage: "\n -r Reverse sort order"
|
//usage: "\n -r Reverse sort order"
|
||||||
//usage: IF_FEATURE_SORT_BIG(
|
//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;
|
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;
|
if (start > len) start = len;
|
||||||
}
|
}
|
||||||
/* Make the copy */
|
/* Make the copy */
|
||||||
if (end < start) end = start;
|
if (end < start)
|
||||||
|
end = start;
|
||||||
str = xstrndup(str+start, end-start);
|
str = xstrndup(str+start, end-start);
|
||||||
/* Handle -d */
|
/* Handle -d */
|
||||||
if (flags & FLAG_d) {
|
if (flags & FLAG_d) {
|
||||||
|
@ -98,6 +98,14 @@ testing "sort with non-default leading delim 3" "sort -n -k3 -t/ input" "\
|
|||||||
//b/1
|
//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" "\
|
testing "sort -u should consider field only when discarding" "sort -u -k2 input" "\
|
||||||
a c
|
a c
|
||||||
" "\
|
" "\
|
||||||
|
Loading…
Reference in New Issue
Block a user