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 }