如果我有一个包含数字列的数据文件,比如
3.14
0.42
6.66
在Vim中有没有一种方法可以通过加法、减法和除法等操作来处理这些操作?例如,假设我想在一列中的每个数字上加上2.1,我应该怎么做呢?
例如,我可以通过管道连接到Awk脚本,但我想知道是否有内置方法,但我在帮助文件中找不到任何东西。
发布于 2010-09-28 04:25:59
发布于 2010-09-29 02:18:15
表达式寄存器在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.
发布于 2013-08-23 18:12:42
一个有用的特性(在这种情况下恰好很方便)是用表达式进行替换(请参阅:help sub-replace-\=
)。它允许在替换命令的每个模式匹配上评估表达式,并用该表达式的结果替换匹配的文本。
例如,要将2.1添加到以制表符分隔的文件的第三列中的所有值,可以使用以下命令。
:%s/^\%([^\t]*\t\)\{2}\zs[^\t]*/\=str2float(submatch(0))+2.1/
https://stackoverflow.com/questions/3807464
复制相似问题