Teach comm(1) and uniq(1) about an option for case-insensitive work.

PR:		3042
Submitted by:	graphix@iastate.edu (Kent Vander Velden)
This commit is contained in:
Joerg Wunsch 1997-09-07 15:09:22 +00:00
parent c816cfc962
commit 2ca7dc1598
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=29207
4 changed files with 42 additions and 12 deletions

View File

@ -32,7 +32,8 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" @(#)comm.1 8.1 (Berkeley) 6/6/93
.\" From: @(#)comm.1 8.1 (Berkeley) 6/6/93
.\" $Id$
.\"
.Dd June 6, 1993
.Os
@ -42,7 +43,7 @@
.Nd select or reject lines common to two files
.Sh SYNOPSIS
.Nm comm
.Op Fl 123
.Op Fl 123i
.Ar file1 file2
.Sh DESCRIPTION
The
@ -69,6 +70,8 @@ Suppress printing of column 1.
Suppress printing of column 2.
.It Fl 3
Suppress printing of column 3.
.It Fl i
Case insensitive comparison of lines.
.El
.Pp
Each column will have a number of tab characters prepended to it

View File

@ -41,7 +41,11 @@ static char copyright[] =
#endif /* not lint */
#ifndef lint
static char sccsid[] = "@(#)comm.c 8.4 (Berkeley) 5/4/95";
#if 0
static char sccsid[] = "From: @(#)comm.c 8.4 (Berkeley) 5/4/95";
#endif
static const char rcsid[] =
"$Id$";
#endif /* not lint */
#include <err.h>
@ -66,13 +70,15 @@ main(argc, argv)
char *argv[];
{
int comp, file1done, file2done, read1, read2;
int ch, flag1, flag2, flag3;
int ch, flag1, flag2, flag3, iflag;
FILE *fp1, *fp2;
char *col1, *col2, *col3;
char **p, line1[MAXLINELEN], line2[MAXLINELEN];
flag1 = flag2 = flag3 = 1;
while ((ch = getopt(argc, argv, "-123")) != -1)
iflag = 0;
while ((ch = getopt(argc, argv, "-123i")) != -1)
switch(ch) {
case '-':
--optind;
@ -86,6 +92,9 @@ main(argc, argv)
case '3':
flag3 = 0;
break;
case 'i':
iflag = 1;
break;
case '?':
default:
usage();
@ -129,7 +138,12 @@ done: argc -= optind;
}
/* lines are the same */
if (!(comp = strcmp(line1, line2))) {
if(iflag)
comp = strcasecmp(line1, line2);
else
comp = strcmp(line1, line2);
if (!comp) {
read1 = read2 = 1;
if (col3)
(void)printf("%s%s", col3, line1);
@ -180,6 +194,6 @@ file(name)
static void
usage()
{
(void)fprintf(stderr, "usage: comm [-123] file1 file2\n");
(void)fprintf(stderr, "usage: comm [-123i] file1 file2\n");
exit(1);
}

View File

@ -32,7 +32,8 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" @(#)uniq.1 8.1 (Berkeley) 6/6/93
.\" From: @(#)uniq.1 8.1 (Berkeley) 6/6/93
.\" $Id$
.\"
.Dd June 6, 1993
.Dt UNIQ 1
@ -43,6 +44,7 @@
.Sh SYNOPSIS
.Nm
.Op Fl c | Fl d | Fl u
.Op Fl i
.Op Fl f Ar fields
.Op Fl s Ar chars
.Oo
@ -87,6 +89,8 @@ fields will be ignored.
Character numbers are one based, i.e. the first character is character one.
.It Fl u
Don't output lines that are repeated in the input.
.It Fl i
Case insensitive comparison of lines.
.\".It Fl Ns Ar n
.\"(Deprecated; replaced by
.\".Fl f ) .

View File

@ -45,7 +45,7 @@ static const char copyright[] =
static char sccsid[] = "@(#)uniq.c 8.3 (Berkeley) 5/4/95";
#endif
static const char rcsid[] =
"$Id$";
"$Id: uniq.c,v 1.3 1997/08/21 06:51:10 charnier Exp $";
#endif /* not lint */
#include <ctype.h>
@ -75,9 +75,10 @@ main (argc, argv)
FILE *ifp, *ofp;
int ch;
char *prevline, *thisline, *p;
int iflag = 0, comp;
obsolete(argv);
while ((ch = getopt(argc, argv, "-cdf:s:u")) != -1)
while ((ch = getopt(argc, argv, "-cdif:s:u")) != -1)
switch (ch) {
case '-':
--optind;
@ -88,6 +89,9 @@ main (argc, argv)
case 'd':
dflag = 1;
break;
case 'i':
iflag = 1;
break;
case 'f':
numfields = strtol(optarg, &p, 10);
if (numfields < 0 || *p)
@ -152,7 +156,12 @@ done: argc -= optind;
}
/* If different, print; set previous to new value. */
if (strcmp(t1, t2)) {
if (iflag)
comp = strcasecmp(t1, t2);
else
comp = strcmp(t1, t2);
if (comp) {
show(ofp, prevline);
t1 = prevline;
prevline = thisline;
@ -245,6 +254,6 @@ static void
usage()
{
(void)fprintf(stderr,
"usage: uniq [-c | -du] [-f fields] [-s chars] [input [output]]\n");
"usage: uniq [-c | -du | -i] [-f fields] [-s chars] [input [output]]\n");
exit(1);
}