分页: 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命令好像看起来清楚点,
但对科学表示法的数好像不行