My next concern was splitting each line into an array of strings. I found that String.split("\\s+") was slower than using a precompiled expression. But I also found that either technique is slower than custom code that does the splitting by stepping through the line a character at a time.
There are probably additional performance gains to be made, but JCols is close to GNU AWK in performance now. GNU AWK is surprising hard to beat considering that the interpreter does not support JIT compilation.