Applied patch from I.Q. to add sort -u as a feature.

This commit is contained in:
Mark Whitley 2001-04-17 18:56:18 +00:00
parent 6e808ca354
commit fccaa3629b
6 changed files with 79 additions and 21 deletions

View File

@ -235,9 +235,12 @@
// Enable support for tar -z option (currently only works for inflating) // Enable support for tar -z option (currently only works for inflating)
#define BB_FEATURE_TAR_GZIP #define BB_FEATURE_TAR_GZIP
// //
//// Enable reverse sort // Enable reverse sort
#define BB_FEATURE_SORT_REVERSE #define BB_FEATURE_SORT_REVERSE
// //
// Enable uniqe sort
#define BB_FEATURE_SORT_UNIQUE
//
// Enable command line editing in the shell. // Enable command line editing in the shell.
// Only relevant if BB_SH is enabled. On by default. // Only relevant if BB_SH is enabled. On by default.
#define BB_FEATURE_COMMAND_EDITING #define BB_FEATURE_COMMAND_EDITING

View File

@ -1356,15 +1356,24 @@
"[2 second delay results]\n" "[2 second delay results]\n"
#ifdef BB_FEATURE_SORT_UNIQUE
#define USAGE_SORT_UNIQUE(a) a
#else
#define USAGE_SORT_UNIQUE(a)
#endif
#ifdef BB_FEATURE_SORT_REVERSE #ifdef BB_FEATURE_SORT_REVERSE
#define USAGE_SORT_REVERSE(a) a #define USAGE_SORT_REVERSE(a) a
#else #else
#define USAGE_SORT_REVERSE(a) #define USAGE_SORT_REVERSE(a)
#endif #endif
#define sort_trivial_usage \ #define sort_trivial_usage \
"[-n]" USAGE_SORT_REVERSE(" [-r]") " [FILE]..." "[-n" USAGE_SORT_REVERSE("r") USAGE_SORT_UNIQUE("u") "] [FILE]..."
#define sort_full_usage \ #define sort_full_usage \
"Sorts lines of text in the specified files" "Sorts lines of text in the specified files\n\n"\
"Options:\n" \
USAGE_SORT_UNIQUE("\t-u\tsuppress duplicate lines\n") \
USAGE_SORT_REVERSE("\t-r\tsort in reverse order\n") \
"\t-n\tsort numerics"
#define sort_example_usage \ #define sort_example_usage \
"$ echo -e \"e\\nf\\nb\\nd\\nc\\na\" | sort\n" \ "$ echo -e \"e\\nf\\nb\\nd\\nc\\na\" | sort\n" \
"a\n" \ "a\n" \

View File

@ -46,8 +46,11 @@ int sort_main(int argc, char **argv)
#ifdef BB_FEATURE_SORT_REVERSE #ifdef BB_FEATURE_SORT_REVERSE
int reverse = FALSE; int reverse = FALSE;
#endif #endif
#ifdef BB_FEATURE_SORT_UNIQUE
int unique = FALSE;
#endif
while ((opt = getopt(argc, argv, "nr")) != -1) { while ((opt = getopt(argc, argv, "nru")) != -1) {
switch (opt) { switch (opt) {
case 'n': case 'n':
compare = compare_numeric; compare = compare_numeric;
@ -56,6 +59,11 @@ int sort_main(int argc, char **argv)
case 'r': case 'r':
reverse = TRUE; reverse = TRUE;
break; break;
#endif
#ifdef BB_FEATURE_SORT_UNIQUE
case 'u':
unique = TRUE;
break;
#endif #endif
default: default:
show_usage(); show_usage();
@ -81,12 +89,18 @@ int sort_main(int argc, char **argv)
/* print it */ /* print it */
#ifdef BB_FEATURE_SORT_REVERSE #ifdef BB_FEATURE_SORT_REVERSE
if (reverse) if (reverse) {
for (i = nlines - 1; 0 <= i; i--) for (i = --nlines; 0 <= i; i--)
puts(lines[i]); #ifdef BB_FEATURE_SORT_UNIQUE
else if((!unique) || (i == nlines) || (strcmp(lines[i + 1], lines[i])))
#endif #endif
for (i = 0; i < nlines; i++) puts(lines[i]);
puts(lines[i]); } else
#endif
for (i = 0; i < nlines; i++)
#ifdef BB_FEATURE_SORT_UNIQUE
if((!unique) || (!i) || (strcmp(lines[i - 1], lines[i])))
#endif
puts(lines[i]);
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }

View File

@ -1356,15 +1356,24 @@
"[2 second delay results]\n" "[2 second delay results]\n"
#ifdef BB_FEATURE_SORT_UNIQUE
#define USAGE_SORT_UNIQUE(a) a
#else
#define USAGE_SORT_UNIQUE(a)
#endif
#ifdef BB_FEATURE_SORT_REVERSE #ifdef BB_FEATURE_SORT_REVERSE
#define USAGE_SORT_REVERSE(a) a #define USAGE_SORT_REVERSE(a) a
#else #else
#define USAGE_SORT_REVERSE(a) #define USAGE_SORT_REVERSE(a)
#endif #endif
#define sort_trivial_usage \ #define sort_trivial_usage \
"[-n]" USAGE_SORT_REVERSE(" [-r]") " [FILE]..." "[-n" USAGE_SORT_REVERSE("r") USAGE_SORT_UNIQUE("u") "] [FILE]..."
#define sort_full_usage \ #define sort_full_usage \
"Sorts lines of text in the specified files" "Sorts lines of text in the specified files\n\n"\
"Options:\n" \
USAGE_SORT_UNIQUE("\t-u\tsuppress duplicate lines\n") \
USAGE_SORT_REVERSE("\t-r\tsort in reverse order\n") \
"\t-n\tsort numerics"
#define sort_example_usage \ #define sort_example_usage \
"$ echo -e \"e\\nf\\nb\\nd\\nc\\na\" | sort\n" \ "$ echo -e \"e\\nf\\nb\\nd\\nc\\na\" | sort\n" \
"a\n" \ "a\n" \

28
sort.c
View File

@ -46,8 +46,11 @@ int sort_main(int argc, char **argv)
#ifdef BB_FEATURE_SORT_REVERSE #ifdef BB_FEATURE_SORT_REVERSE
int reverse = FALSE; int reverse = FALSE;
#endif #endif
#ifdef BB_FEATURE_SORT_UNIQUE
int unique = FALSE;
#endif
while ((opt = getopt(argc, argv, "nr")) != -1) { while ((opt = getopt(argc, argv, "nru")) != -1) {
switch (opt) { switch (opt) {
case 'n': case 'n':
compare = compare_numeric; compare = compare_numeric;
@ -56,6 +59,11 @@ int sort_main(int argc, char **argv)
case 'r': case 'r':
reverse = TRUE; reverse = TRUE;
break; break;
#endif
#ifdef BB_FEATURE_SORT_UNIQUE
case 'u':
unique = TRUE;
break;
#endif #endif
default: default:
show_usage(); show_usage();
@ -81,12 +89,18 @@ int sort_main(int argc, char **argv)
/* print it */ /* print it */
#ifdef BB_FEATURE_SORT_REVERSE #ifdef BB_FEATURE_SORT_REVERSE
if (reverse) if (reverse) {
for (i = nlines - 1; 0 <= i; i--) for (i = --nlines; 0 <= i; i--)
puts(lines[i]); #ifdef BB_FEATURE_SORT_UNIQUE
else if((!unique) || (i == nlines) || (strcmp(lines[i + 1], lines[i])))
#endif #endif
for (i = 0; i < nlines; i++) puts(lines[i]);
puts(lines[i]); } else
#endif
for (i = 0; i < nlines; i++)
#ifdef BB_FEATURE_SORT_UNIQUE
if((!unique) || (!i) || (strcmp(lines[i - 1], lines[i])))
#endif
puts(lines[i]);
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }

13
usage.h
View File

@ -1356,15 +1356,24 @@
"[2 second delay results]\n" "[2 second delay results]\n"
#ifdef BB_FEATURE_SORT_UNIQUE
#define USAGE_SORT_UNIQUE(a) a
#else
#define USAGE_SORT_UNIQUE(a)
#endif
#ifdef BB_FEATURE_SORT_REVERSE #ifdef BB_FEATURE_SORT_REVERSE
#define USAGE_SORT_REVERSE(a) a #define USAGE_SORT_REVERSE(a) a
#else #else
#define USAGE_SORT_REVERSE(a) #define USAGE_SORT_REVERSE(a)
#endif #endif
#define sort_trivial_usage \ #define sort_trivial_usage \
"[-n]" USAGE_SORT_REVERSE(" [-r]") " [FILE]..." "[-n" USAGE_SORT_REVERSE("r") USAGE_SORT_UNIQUE("u") "] [FILE]..."
#define sort_full_usage \ #define sort_full_usage \
"Sorts lines of text in the specified files" "Sorts lines of text in the specified files\n\n"\
"Options:\n" \
USAGE_SORT_UNIQUE("\t-u\tsuppress duplicate lines\n") \
USAGE_SORT_REVERSE("\t-r\tsort in reverse order\n") \
"\t-n\tsort numerics"
#define sort_example_usage \ #define sort_example_usage \
"$ echo -e \"e\\nf\\nb\\nd\\nc\\na\" | sort\n" \ "$ echo -e \"e\\nf\\nb\\nd\\nc\\na\" | sort\n" \
"a\n" \ "a\n" \