perl -pe 's/begin\(/$&. ++$n/ge' < input-file
Или для оперативного редактирования (который является заменой файл с измененной копией себя):
perl -pi.back -e 's/begin\(/$&. ++$n/ge' input-and-output-file
(удалите .back
если Вы чувствуете себя предприимчивыми и не нуждаетесь в резервном копировании).
Вышеупомянутые замены когда-либо begin(
с тем же ($&
) с увеличенным значением $n
переменная (++$n
) добавленный (.
).
Если Вы хотите заменить begin()
вместо begin(
:
perl -pe 's/begin\(\K\)/++$n.")"/ge' < input-file
Сценарий sed
избавляется от пробела после 'e', а сценарий awk
просто выводит каждое поле (умножая $3 на 1, чтобы "преобразовать" его в десятичное число, не являющееся дробью):
$ sed -e 's/e /e/g' file | awk '{print $1, $2, $3 * 1}'
1 1 1423
1 2 1589
1 3 85000
1 4 8900
1 5 8796
Это предполагает, что числа с плавающей запятой в файле:
awk
выведет их как fp. Можно заставить awk
выполнять преобразование 's/e /e/' (так что sed
не нужен), но уже поздно и мой мозг устал. sed | awk
- это просто и работает.
Более строгим подходом было бы выполнение checkbashisms
на скриптах, чтобы проверить, действительно ли они sh
- совместимы. Как bash
, так и ksh
смогут выполнять такие сценарии просто нормально. Но опять же, в случае каких-либо проблем придется исправлять сценарии вручную.
Это можно сделать и в кроне. Просто добавьте в/etc/crontab:
@reboot /bin/sleep 600 && COMMAND
-121--121299- { sed 's/ /+/3' | xargs printf '%G% G% G\n'; } <in >out
1 1 1423
1 2 1589
1 3 85000
1 4 8900
1 5 8796
Вы хотите играть с % G
точности флагов, если числа становятся намного больше, чем это.
Это выполнит преобразование:
awk '{print $1, $2, $3 * 10**$4}' file.csv
Предполагая:
Если требуется определенный формат, можно использовать некоторую форму printf
.
Например:
awk '{printf( "%s %s %g "ORS,$1,$2,$3*10**$4)}' file.csv
может напечатать это:
1 1 1423
1 2 1589
1 3 85000
1 4 8900
1 5 8796
2 8 2.589e+28
Последняя строка добавлена, чтобы показать окончательный формат для больших экспонент.
Другой вариант с awk
sprintf
awk 'NF==4{$(NF-1)=sprintf(CONVFMT, $(NF-1)$NF);NF=3}1' file