Я пытался отсортировать, они нумеруют с видом Unix, но это, кажется, не работает:
2e-13
1e-91
2e-13
1e-104
3e-19
9e-99
Это - моя команда:
sort -nr file.txt
Что правильный путь состоит в том, чтобы сделать это?
Используйте -g
(длинная форма --general-numeric-sort
) вместо -n
. Опция -g
передает числа через strtod
для получения их значения, и она распознает этот формат.
Я не уверен, что это доступно во всех реализациях sort
, или только в GNU.
, если ваша сортировка
не имеет -g
, другой способ.
$ 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"
Хорошо, вот не полностью протестированная версия скрипта Python. Предполагаемое использование:
sort_script.py file.txt
К сожалению, я разработал это в Windows, и с двумя установленными разными версиями Python я не могу проверить это должным образом. Предупреждение: требуется новейший Python (с добавленными или измененными функциями печати). Примечание: флаг back_to_file может быть необязательным параметром, хотя с Unix вы всегда можете перенаправить ... даже в Windows вы можете.
#!/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