test script: cat >/tmp/f1 <<'!' a c ! cat >/tmp/f2 <<'!' b c ! fn r { echo $* $* } r comm /tmp/f1 /tmp/f2 r comm -1 /tmp/f1 /tmp/f2 r comm -2 /tmp/f1 /tmp/f2 r comm -3 /tmp/f1 /tmp/f2 r comm -23 /tmp/f1 /tmp/f2 r comm -12 /tmp/f1 /tmp/f2 before: term% r comm /tmp/f1 /tmp/f2 comm /tmp/f1 /tmp/f2 a b c term% r comm -1 /tmp/f1 /tmp/f2 comm -1 /tmp/f1 /tmp/f2 b c term% r comm -2 /tmp/f1 /tmp/f2 comm -2 /tmp/f1 /tmp/f2 a c term% r comm -3 /tmp/f1 /tmp/f2 comm -3 /tmp/f1 /tmp/f2 a b term% r comm -23 /tmp/f1 /tmp/f2 comm -23 /tmp/f1 /tmp/f2 a term% r comm -12 /tmp/f1 /tmp/f2 comm -12 /tmp/f1 /tmp/f2 c note the empty columns in comm -1, comm -2, and comm -12: there is one tab too many. it's an easy fix. i noticed only later that the plan 9 command was essentially the ancient unix one, and a diff against that shows that indeed the l = 1 -> l = 2 was a change in going to plan 9, which dented it. after: doppio% r comm /tmp/f1 /tmp/f2 comm /tmp/f1 /tmp/f2 a b c doppio% r comm -1 /tmp/f1 /tmp/f2 comm -1 /tmp/f1 /tmp/f2 b c doppio% r comm -2 /tmp/f1 /tmp/f2 comm -2 /tmp/f1 /tmp/f2 a c doppio% r comm -3 /tmp/f1 /tmp/f2 comm -3 /tmp/f1 /tmp/f2 a b doppio% r comm -23 /tmp/f1 /tmp/f2 comm -23 /tmp/f1 /tmp/f2 a doppio% r comm -12 /tmp/f1 /tmp/f2 comm -12 /tmp/f1 /tmp/f2 c it now correctly suppresses columns.