Числовые манипуляции в Vim - PullRequest
       0

Числовые манипуляции в Vim

20 голосов
/ 28 сентября 2010

Если у меня есть файл данных со столбцами чисел, такими как

3.14
0.42
6.66

Есть ли способ из Vim, что я могу манипулировать ими с помощью таких операций, как сложение, вычитание и деление?Например, скажем, я хотел добавить 2,1 к каждому числу в столбце, как бы я поступил об этом?

Я могу сделать это, отправив, например, по awk, но я хотел бы знать, есть ли встроенный метод, и я ничего не нашел в файлах справки.

Ответы [ 3 ]

31 голосов
/ 28 сентября 2010

Использовать CTRL-R с регистром выражения =.

Следующая команда добавит 2.1 к числу в строке:

C
<CTRL-R> =
<CTRL-R> "
+2.1
<ENTER>

В сочетании с макросом это может привести к некоторым интересным результатам, таким как пример .

5 голосов
/ 28 сентября 2010

Регистры выражений прекрасно работают с vim.

Вот более старый способ vi сделать это: допустим, у вас есть файл, содержащий группу чисел, по одному в каждой строке, и вы хотите добавить 2.1к каждой из линий.

:%s/$/+2.1/<ENTER> - this would append +2.1 to each line.
:1<ENTER>  - Goto the beginning of the file 
!Gbc<ENTER> - invoke the bc command on each line to do the addition.
2 голосов
/ 23 августа 2013

Полезной функцией, которая оказывается удобной в этом случае, является замена выражением (см. :help sub-replace-\=).Это позволяет оценивать выражение при каждом совпадении с образцом замещающей команды и заменять сопоставленный текст результатом этого выражения.

Например, добавить число 2,1 ко всем значениям в третьем столбце вкладки-отделенный файл, можно использовать следующую команду.

:%s/^\%([^\t]*\t\)\{2}\zs[^\t]*/\=str2float(submatch(0))+2.1/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...