Formatting a DB unl file for easy readiblity

I have some database unload files (pipe delimited) that I need to extract some columns(or part of a column) and reformat and output them into a report file

right now I am inserting a tab between fields but since the lengths of fields vary significantly, the result is not very eye pleasing. Is there an easy one line formatter to print fields to fixed positions (i.e. column 2 starts at char 20)

echo " column 1 \t column 2 \t column 3" > $rpt_file
nawk ' {print " " $1 "\t" $2 "\t" substr($4, 1, 5)}' $db_unl_file >> $rpt_file

TIA

use printf