pr
I'd probably go w/ pr:
printf %s\\n hi wonderful amazing sorry \ superman superhumanwith loss >/tmp/file #^what is all of that, anyway?^ seq 7 | pr -tm /tmp/file -
pr can -merge input files (here /tmp/file and - stdin) line-by-line like paste column-wise, but it can take many other parameters besides. By default it will print headers and footers as well, but -t squashes that.
OUTPUT:
hi 1 wonderful 2 amazing 3 sorry 4 superman 5 superhumanwith 6 loss 7
expand
If you're interested in getting more specific on your own, another option is expand - because you can hand it a list of virtual tab-stops which it will expand to as many spaces as are necessary to fill them.
seq 7 | paste /tmp/file - | expand -t15
Here we only need the first -tabstop of course...
hi 1 wonderful 2 amazing 3 sorry 4 superman 5 superhumanwith 6 loss 7
...but if more were wanted...
seq 14 | paste /tmp/file - /tmp/file - | expand -t15,23,38,46
...we could spell them out in a compounding, comma-separated list...
hi 1 hi 2 wonderful 3 wonderful 4 amazing 5 amazing 6 sorry 7 sorry 8 superman 9 superman 10 superhumanwith 11 superhumanwith 12 loss 13 loss 14
grep:
To find the length of the longest line in a file, and not counting any trailing spaces, and as incremented by standard 8-char tabstop positions, this will probably work:
i=0 while grep -Eq ".{$(((i+=8)-1))}.*[^[:blank:]]" <infile; do :; done
That loop will increment $i by 8 for each run and search <infile for any line which contains at least as many characters as are counted in $i followed by any not blank character. And so when grep cannot find such a line, it will return false and, for your example data, it will assign:
echo "$i" 16
wc:
But those are all POSIX solutions. The most simple thing to do on a GNU system is:
wc -L <infile
...to list out the length of the longest line in <infile, but that will include counts for trailing blanks.