请教VIM如何做这样的除法

Vim、Emacs配置和使用
回复
xhwubai
帖子: 20
注册时间: 2010-04-17 20:17

请教VIM如何做这样的除法

#1

帖子 xhwubai » 2012-03-14 19:22

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列的数除以第一列的数,怎么做?
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 请教VIM如何做这样的除法

#2

帖子 aerofox » 2012-03-15 23:37

代码: 全选

:%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如何做这样的除法

#3

帖子 Fermat618 » 2012-03-16 16:26

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))
爱因斯坦会弹钢琴
爱因斯坦会拉小提琴
爱因斯坦会骑自行车
xhwubai
帖子: 20
注册时间: 2010-04-17 20:17

Re: 请教VIM如何做这样的除法

#4

帖子 xhwubai » 2012-04-01 13:58

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如何做这样的除法

#5

帖子 lilydjwg » 2012-04-01 14:33

处理第三列的:

代码: 全选

:py3do fs = line.split(); fs[2] = str(float(fs[2]) / float(fs[0])); return ' '.join(fs)
当然你也可以用 ruby 或者 lua 什么的来做。
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

Re: 请教VIM如何做这样的除法

#6

帖子 cao627 » 2012-04-01 15:08

代码: 全选

 awk '{print $1,$2,$3/$1,$4/$1,$5,$6/$1,$7/$1}' vimtxt
直接awk命令好像看起来清楚点,
但对科学表示法的数好像不行
回复