I tried to sort these number with Unix sort, but it doesn't seem to work:
    2e-13
    1e-91
    2e-13
    1e-104
    3e-19
    9e-99
This is my command:
sort -nr file.txt
What's the right way to do it?
I tried to sort these number with Unix sort, but it doesn't seem to work:
    2e-13
    1e-91
    2e-13
    1e-104
    3e-19
    9e-99
This is my command:
sort -nr file.txt
What's the right way to do it?
Use -g (long form --general-numeric-sort) instead of -n. The -g option passes the numbers through strtod to obtain their value, and it will recognize this format. 
I'm not sure if this is available on all implementations of sort, or just the GNU one.
if your sort doesn't have -g, another way. 
$ printf "%.200f\n" $(<file) |sort -n |xargs printf "%g\n"
1e-104
9e-99
1e-91
3e-19
2e-13
2e-13
$ sort -g file
1e-104
9e-99
1e-91
3e-19
2e-13
2e-13
$ printf "%.200f\n" `cat file` |sort -n |xargs printf "%g\n"
Ok, here is a not fully tested version of Python script. Supposed usage:
sort_script.py file.txt
Unfortunately I developed this on Windows, and with 2 different versions of Python installed I cannot test it properly. Warning: requires newest Python (with, print functions added or changed). Note: back_to_file flag can be an optional parameter, although with Unix you can always redirect ... even in Windows you can.
#!/usr/bin/env python3.1
# Note: requires newer python
import sys
#Remove this line:
sys.argv = ('', 'file.txt')
assert(len(sys.argv) == 2)
with open(sys.argv[1], 'r') as fin:
    lines = fin.readlines()
lines_sorted = sorted(lines, key=lambda x: float(x))
back_to_file = False # Change this if needed
if back_to_file:
    with open(sys.argv[1], 'w') as fout:
        fout.writelines(lines_sorted)
else:
    for lns in lines_sorted:
        print(lns, end='') # Suppress new line