part1: tweak the format strings so that numbers never run together.  If, 
for example, your blocked process count hits double digits, it smears into 
the next column, which then makes the rest of the output unparseable by 
scripts.  The alignment is then a little off, but I'll take hard to read 
over impossible to read anyday.

part2: do not print the banner if it's not a tty.  If you're piping the 
output, the receiver probably doesn't want to see it.

Index: vmstat.c
===================================================================
RCS file: /home/tedu/cvs/src/usr.bin/vmstat/vmstat.c,v
retrieving revision 1.113
diff -u -r1.113 vmstat.c
--- vmstat.c    27 Oct 2009 23:59:49 -0000      1.113
+++ vmstat.c    16 Nov 2009 01:15:07 -0000
@@ -390,11 +390,11 @@
                        warn("could not read vm.vmmeter");
                        bzero(&total, sizeof(total));
                }
-               (void)printf("%2u%2u%2u",
+               (void)printf(" %u %u %u ",
                    total.t_rq - 1, total.t_dw + total.t_pw, total.t_sw);
 #define        rate(x) ((((unsigned)x) + halfuptime) / uptime) /* round */
 #define pgtok(a) ((a) * ((unsigned int)uvmexp.pagesize >> 10))
-               (void)printf("%7u %7u ",
+               (void)printf("%6u %7u ",
                    pgtok(total.t_avm), pgtok(total.t_free));
                (void)printf("%4u ", rate(uvmexp.faults - ouvmexp.faults));
                (void)printf("%3u ", rate(uvmexp.pdreact - ouvmexp.pdreact));
@@ -427,6 +427,10 @@
 printhdr(void)
 {
        int i;
+       static int printedhdr;
+
+       if (printedhdr && !isatty(STDOUT_FILENO))
+               return;
 
        (void)printf(" procs    memory       page%*s", 20, "");
        if (ndrives > 0)
@@ -445,6 +449,7 @@
                            dr_name[i][strlen(dr_name[i]) - 1]);
        (void)printf(" int   sys   cs us sy id\n");
        hdrcnt = winlines - 2;
+       printedhdr = 1;
 }
 
 /*

Reply via email to