File: tsv2ssv.awk
   1 #!/usr/bin/awk -f
   2 
   3 # tsv2ssv [filenames...]
   4 #
   5 # Realign all detected columns from TSV (tab-separated values) lines, turning
   6 # them into SSV (space-separated values) lines, right-aligning any detected
   7 # numbers in any column.
   8 
   9 BEGIN { FS = "\t" }
  10 
  11 {
  12     for (i = 1; i <= NF; i++) {
  13         w = length($i)
  14         if (maxw[i] < w) maxw[i] = w
  15         data[NR][i] = $i
  16     }
  17 }
  18 
  19 END {
  20     for (i in data) {
  21         for (j = 1; j <= length(data[i]); j++) {
  22             if (j > 1) printf "  "
  23             v = data[i][j]
  24             pad = match(v, /^[+-]?[0-9]+(\.[0-9]+)?$/) ? maxw[j] : -maxw[j]
  25             printf "%*s", pad, v
  26         }
  27         printf "\n"
  28     }
  29 }