分页: 1 / 1

请教VIM如何做这样的除法

发表于 : 2012-03-14 19:22
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列的数除以第一列的数,怎么做?

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

发表于 : 2012-03-15 23:37
aerofox

代码: 全选

:%s:\(\S\+\)\(\s\+\S\+\s\+\)\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\):\=submatch(1).submatch(2).string(str2float(submatch(3))/submatch(1)) 

把第3列的数除以第一列的数,结果替换第三列的数。仿此可以写出处理其它列的替换语句。

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

发表于 : 2012-03-16 16:26
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))

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

发表于 : 2012-04-01 13:58
xhwubai
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))
谢谢啊!虽然看不懂,学习下!

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

发表于 : 2012-04-01 14:33
lilydjwg
处理第三列的:

代码: 全选

:py3do fs = line.split(); fs[2] = str(float(fs[2]) / float(fs[0])); return ' '.join(fs)
当然你也可以用 ruby 或者 lua 什么的来做。

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

发表于 : 2012-04-01 15:08
cao627

代码: 全选

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