Используйте sed
, чтобы поставить перед каждой строкой 1000*
, а затем обработать полученные математические выражения с bc
.Чтобы отобразить только первую цифру после десятичной точки, вы можете снова использовать sed
.
sed 's/^/1000*/' yourFile | bc | sed -E 's/(.*\..).*/\1/'
Это напечатает последние из ваших ожидаемых выходных данных.Как и вы хотели, десятичные дроби вырезаются, а не округляются (1.36
преобразуется в 1.3
).
Чтобы удалить все десятичные цифры, замените последнюю … | sed …
на sed -E 's/\..*//'
или используйте следующую команду
sed 's:^.*$:1000*&/1:' yourFile | bc
С помощью этих команд перезапись файла напрямую невозможна.Вы должны записать во временный файл (добавление > tmp && mv tmp yourFile
) или использовать команду sponge
из пакета moreutils
(добавление | sponge yourFile
).
Однако, если вы хотите удалить все десятичные точкипосле умножения есть хитрость.Вместо фактического умножения на 1000 мы можем синтаксически сдвинуть десятичную точку.Это можно сделать одной командой sed
.sed
имеет опцию -i
для перезаписи входных файлов.
sed -i.bak -E 's/\..*/&000/;s/^[^.]*$/&.000/;s/\.(...).*/\1/;s/^(-?)0*(.)/\1\2/' yourFile
Команда изменяет содержимое yourFile
на
4
43
149
443
882
975
995
1000
Создается резервная копия yourFile.bak
оригинала.
Одиночный sed
Команда также должна работать с любым форматом ввода (даже для таких вещей, как -.1
→ -100
).