100 0.55 +2.008620E+03 +1.172100E+01 +8.302033E-01 +3.275000E+00 +1.743000E+00 7.570000E-01
40 10 +6.692110E+01 +4.441010E-01 +7.914733E-01 +2.622000E+00 +1.294000E+00 7.160000E-01
1.5 10 +2.141790E+00 +1.434170E-02 +7.715492E-01 -1.270000E-01 +1.840000E-01 7.030000E-01
我想让第3、4、6、7列的数除以第一列的数,怎么做?
请教VIM如何做这样的除法
-
- 帖子: 20
- 注册时间: 2010-04-17 20:17
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 请教VIM如何做这样的除法
代码: 全选
:%s:\(\S\+\)\(\s\+\S\+\s\+\)\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\):\=submatch(1).submatch(2).string(str2float(submatch(3))/submatch(1))
把第3列的数除以第一列的数,结果替换第三列的数。仿此可以写出处理其它列的替换语句。
- Fermat618
- 帖子: 728
- 注册时间: 2008-12-28 16:01
Re: 请教VIM如何做这样的除法
先把这几列数据弄成个数据类型存起来,要再怎么弄岂不随你?xhwubai 写了: 100 0.55 +2.008620E+03 +1.172100E+01 +8.302033E-01 +3.275000E+00 +1.743000E+00 7.570000E-01
40 10 +6.692110E+01 +4.441010E-01 +7.914733E-01 +2.622000E+00 +1.294000E+00 7.160000E-01
1.5 10 +2.141790E+00 +1.434170E-02 +7.715492E-01 -1.270000E-01 +1.840000E-01 7.030000E-01
我想让第3、4、6、7列的数除以第一列的数,怎么做?
代码: 全选
:py3 d = list(map(lambda x: x.split(), vim.current.range))
爱因斯坦会弹钢琴
爱因斯坦会拉小提琴
爱因斯坦会骑自行车
爱因斯坦会拉小提琴
爱因斯坦会骑自行车
-
- 帖子: 20
- 注册时间: 2010-04-17 20:17
Re: 请教VIM如何做这样的除法
谢谢啊!虽然看不懂,学习下!Fermat618 写了:先把这几列数据弄成个数据类型存起来,要再怎么弄岂不随你?xhwubai 写了: 100 0.55 +2.008620E+03 +1.172100E+01 +8.302033E-01 +3.275000E+00 +1.743000E+00 7.570000E-01
40 10 +6.692110E+01 +4.441010E-01 +7.914733E-01 +2.622000E+00 +1.294000E+00 7.160000E-01
1.5 10 +2.141790E+00 +1.434170E-02 +7.715492E-01 -1.270000E-01 +1.840000E-01 7.030000E-01
我想让第3、4、6、7列的数除以第一列的数,怎么做?代码: 全选
:py3 d = list(map(lambda x: x.split(), vim.current.range))
- lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 请教VIM如何做这样的除法
处理第三列的:
当然你也可以用 ruby 或者 lua 什么的来做。
代码: 全选
:py3do fs = line.split(); fs[2] = str(float(fs[2]) / float(fs[0])); return ' '.join(fs)
-
- 帖子: 992
- 注册时间: 2007-12-05 10:57
- 系统: ubuntu14.04
- 来自: 金山
Re: 请教VIM如何做这样的除法
代码: 全选
awk '{print $1,$2,$3/$1,$4/$1,$5,$6/$1,$7/$1}' vimtxt
但对科学表示法的数好像不行