开发者

Pretty print table with awk

开发者 https://www.devze.com 2023-03-10 18:06 出处:网络
I want to print a table that looks like this: > field1 field2 field3 field4 > 11.797.8711.7968 > .. more numbers

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 col开发者_运维技巧umns 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.


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

Use column.

Example from the man page:

   (printf "PERM LINKS OWNER GROUP SIZE MONTH DAY HH:MM/YEAR NAME\n" \
   ; ls -l | sed 1d) | column -t


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...

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号