Small change to wc

Kostik Belousov kostikbel at gmail.com
Fri Dec 5 15:15:07 PST 2008


On Fri, Dec 05, 2008 at 03:10:56PM -0800, Sheldon Givens wrote:
> What's the problem having it? The total code is mere bytes and it eases the
> transition for others who are migrating from Linux.
> You're absolutely right in that it can be done with awk (fairly simply, too)
> but it doesn't hurt to explore options. Additionally, with awk, you can't
> get other figures with the same command, which increases ease of use.
> IE: What's the equivalent to "wc -clwL" in awk? Would you really rather run
> wc -clw && awk '{if(length>x){x=length}}END{if(x>0){print x}else{print
> 0}}'`?
> 
> Isn't wc -L a more elegant solution than awk
> '{if(length>x){x=length}}END{if(x>0){print x}else{print 0}}'`?
> 
> Should I continue?

Real argument pro is that you have one less thing to worry when you
trying to run some script, written on Linux, on the FreeBSD system.

> 
> On Fri, Dec 5, 2008 at 2:48 PM, Garrett Cooper <yanefbsd at gmail.com> wrote:
> 
> > On Fri, Dec 5, 2008 at 2:14 PM, Sheldon Givens <sheldon at sigsegv.ca> wrote:
> > > Hello everyone,
> > > In the process of migrating the last of a few Linux servers to FreeBSD,
> > we
> > > ran in to a bit of a snag with one of our scripts when BSD wc didn't have
> > an
> > > equivalent to the Linux -L. This flag tells wc to keep track of the
> > longest
> > > line in the input.
> > >
> > > Here's a little diff to add this functionality to BSD wc.
> > >
> > > With this patch, an additional parameter is added to output that shows
> > the
> > > length of the longest line
> > >
> > > My apologies if this is in the wrong format. I don't often post here.
> > >
> > > Happy Holidays,
> > >
> > > Sheldon Givens
> > >
> > >
> > > ---snip---
> > > 65,66c65,66
> > > < uintmax_t tlinect, twordct, tcharct;
> > > < int doline, doword, dochar, domulti;
> > > ---
> > >> uintmax_t tlinect, twordct, tcharct, tlongline;
> > >> int doline, doword, dochar, domulti, dolongline;
> > > 78c78
> > > <       while ((ch = getopt(argc, argv, "clmw")) != -1)
> > > ---
> > >>       while ((ch = getopt(argc, argv, "clmwL")) != -1)
> > > 93a94,96
> > >>               case 'L':
> > >>                       dolongline = 1;
> > >>                       break;
> > > 127a131,132
> > >>               if (dolongline)
> > >>                       (void)printf(" %7ju", tlongline);
> > > 137c142
> > > <       uintmax_t linect, wordct, charct;
> > > ---
> > >>       uintmax_t linect, wordct, charct, llcnt, tmpll;
> > > 146c151
> > > <       linect = wordct = charct = 0;
> > > ---
> > >>       linect = wordct = charct = llcnt = tmpll = 0;
> > > 171c176,179
> > > <                                       if (*p == '\n')
> > > ---
> > >>                                       if (*p == '\n') {
> > >>                                               if (tmpll > llcnt)
> > >>                                                       llcnt = tmpll;
> > >>                                               tmpll = 0;
> > > 172a181
> > >>                                       } else { tmpll++; }
> > > 179a189,192
> > >>                       if (dolongline) {
> > >>                               tlongline = llcnt;
> > >>                               (void)printf(" %7ju", tlongline);
> > >>                       }
> > > 197c210
> > > <                               return (0);
> > > ---
> > >>                       return (0);
> > > 231a245
> > >>                       tmpll++;
> > > 234c248,251
> > > <                       if (wch == L'\n')
> > > ---
> > >>                       if (wch == L'\n') {
> > >>                               if (tmpll > llcnt)
> > >>                                       llcnt = tmpll;
> > >>                               tmpll = 0;
> > > 235a253
> > >>                       }
> > > 258a277,280
> > >>       if (dolongline) {
> > >>               tlongline = llcnt;
> > >>               (void)printf(" %7ju", llcnt - 1);
> > >>       }
> > > 266c288
> > > <       (void)fprintf(stderr, "usage: wc [-clmw] [file ...]\n");
> > > ---
> > >>       (void)fprintf(stderr, "usage: wc [-clmwL] [file ...]\n");
> > >
> > > ---unsnip---
> >
> > What's the plus side of having this? I can accomplish the same with
> > something like awk without the additional overhead, which would be
> > guaranteed to be portable.
> > -Garrett
> >
> _______________________________________________
> freebsd-hackers at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20081205/ca8fc173/attachment.pgp


More information about the freebsd-hackers mailing list