uniq(1): Add some long options
These match GNU uniq(1) where appropriate for compatibility's sake. While here, re-sort options alphabetically by the short-option. MFC after: 1 month
This commit is contained in:
parent
ad4e78b50a
commit
a597327b90
@ -31,7 +31,7 @@
|
||||
.\" From: @(#)uniq.1 8.1 (Berkeley) 6/6/93
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd May 15, 2017
|
||||
.Dd May 1, 2018
|
||||
.Dt UNIQ 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -71,34 +71,34 @@ so it may be necessary to sort the files first.
|
||||
.Pp
|
||||
The following options are available:
|
||||
.Bl -tag -width Ds
|
||||
.It Fl c
|
||||
.It Fl c , Fl -count
|
||||
Precede each output line with the count of the number of times the line
|
||||
occurred in the input, followed by a single space.
|
||||
.It Fl d
|
||||
.It Fl d , Fl -repeated
|
||||
Only output lines that are repeated in the input.
|
||||
.It Fl f Ar num
|
||||
.It Fl f Ar num , Fl -skip-fields Ar num
|
||||
Ignore the first
|
||||
.Ar num
|
||||
fields in each input line when doing comparisons.
|
||||
A field is a string of non-blank characters separated from adjacent fields
|
||||
by blanks.
|
||||
Field numbers are one based, i.e., the first field is field one.
|
||||
.It Fl s Ar chars
|
||||
.It Fl i , Fl -ignore-case
|
||||
Case insensitive comparison of lines.
|
||||
.It Fl s Ar chars , Fl -skip-chars Ar chars
|
||||
Ignore the first
|
||||
.Ar chars
|
||||
characters in each input line when doing comparisons.
|
||||
If specified in conjunction with the
|
||||
.Fl f
|
||||
.Fl f , Fl -unique
|
||||
option, the first
|
||||
.Ar chars
|
||||
characters after the first
|
||||
.Ar num
|
||||
fields will be ignored.
|
||||
Character numbers are one based, i.e., the first character is character one.
|
||||
.It Fl u
|
||||
.It Fl u , Fl -unique
|
||||
Only output lines that are not repeated in the input.
|
||||
.It Fl i
|
||||
Case insensitive comparison of lines.
|
||||
.\".It Fl Ns Ar n
|
||||
.\"(Deprecated; replaced by
|
||||
.\".Fl f ) .
|
||||
|
@ -51,6 +51,7 @@ static const char rcsid[] =
|
||||
#include <ctype.h>
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <getopt.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
#include <nl_types.h>
|
||||
@ -66,6 +67,17 @@ static const char rcsid[] =
|
||||
static int cflag, dflag, uflag, iflag;
|
||||
static int numchars, numfields, repeats;
|
||||
|
||||
static const struct option long_opts[] =
|
||||
{
|
||||
{"count", no_argument, NULL, 'c'},
|
||||
{"repeated", no_argument, NULL, 'd'},
|
||||
{"skip-fields", required_argument, NULL, 'f'},
|
||||
{"ignore-case", no_argument, NULL, 'i'},
|
||||
{"skip-chars", required_argument, NULL, 's'},
|
||||
{"unique", no_argument, NULL, 'u'},
|
||||
{NULL, no_argument, NULL, 0}
|
||||
};
|
||||
|
||||
static FILE *file(const char *, const char *);
|
||||
static wchar_t *convert(const char *);
|
||||
static int inlcmp(const char *, const char *);
|
||||
@ -99,7 +111,8 @@ main (int argc, char *argv[])
|
||||
(void) setlocale(LC_ALL, "");
|
||||
|
||||
obsolete(argv);
|
||||
while ((ch = getopt(argc, argv, "cdif:s:u")) != -1)
|
||||
while ((ch = getopt_long(argc, argv, "+cdif:s:u", long_opts,
|
||||
NULL)) != -1)
|
||||
switch (ch) {
|
||||
case 'c':
|
||||
cflag = 1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user