我的文本文件中有一个数字列,如下所示:
10 1 -0.93
11 1 -0.93
12 1 -0.93
13 1 -0.93
...
Run Code Online (Sandbox Code Playgroud)
(第一列数字不是行号。)
我想通过每一个乘以更换号码的最后一列0.1,0.2,0.3,等这样的结果是
10 1 -0.093
11 1 -0.186
12 1 -0.279
13 1 -0.372
...
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用=寄存器进行数学运算(这是正确的术语吗?),但我似乎无法弄清楚如何将其自动化。请指教。
假设0.1/ 0.2/... 对应于“行号 / 10”,您可以使用
%s/\v(\S+)$/\=str2float(submatch(1)) * line('.') * 0.1
Run Code Online (Sandbox Code Playgroud)
它捕获最后一列并使用
子替换表达式返回“value * line_number * 0.1”的结果(:help sub-replace-expression有关这方面的更多信息,请参见)。
如果值不在第 1 行开始,您可以使用视觉选择(设置line("'<"))并使用它line('.') - line("'<") + 1来了解您在块中的位置。然后添加初始乘数(0.1此处):
'<,'>s/\v(\S+)$/\=str2float(submatch(1)) * (line('.') - line("'<") + 1) * 0.1
Run Code Online (Sandbox Code Playgroud)