Search code examples
awkformattingtabular

Pretty print table with awk


I want to print a table that looks like this:

> field1 field2 field3 field4    
> 11.79     7.87    11.79    68   
> .. more numbers

How can I arrange it that the captions for the columns are arranged in a way that puts them on top of the respective column?

> field1    field2  field3   field4       
> 11.79     7.87    11.79    68
> .. more numbers

My generating script looks like this: capture.sh:

  echo 'field1, field2, field3, field4'
  awk '/Capture the tablestuff/{set variables}
  /DONE/ { printf("%5d %8.2f %8.2f %8.2f \n" ,field1, field2, field3, filed4); '

I really would like to refrain from ascii-formatting the echo command if I can.


Solution

  • How about this one-liner:

    awk 'BEGIN {printf("%s %8s %8s %8s \n" ,"field1", "field2", "field3", "field4")}
    {printf("%6.2f %8.2f %8.2f %8.2f\n", $1, $2, $3, $4)}' input
    
    field1   field2   field3   field4 
     11.79     7.87    11.79    68.00
     11.79     7.87    11.79    68.00
     11.79     7.87    11.79    68.00
     11.79     7.87    11.79    68.00
    

    I.e. using BEGIN to print the header, and then print each line formatted according to the printf, with all the numbers in the input file, here assuming 4 on each line and nothing else. Tweek it to your needs...