【问题标题】:Multiply a decimal number in vim by a fixed amount将vim中的十进制数乘以固定数量
【发布时间】:2020-03-21 13:06:08
【问题描述】:

我有一个包含以下内容的文件:

set x 0.00456 y 0.05896.

我想将数字乘以一个固定的数量(比如说 1000)。这些数字并不总是存在于同一列中,因此任何带有 awk 的东西都不在图片中。我一直在尝试这个,但不确定我使用子匹配的方式是否正确。

%s/ \d*\.\d*/\=submatch(2)*100

【问题讨论】:

    标签: regex awk vim text-processing


    【解决方案1】:

    vim

    您的submatch(2) 用法不正确。您没有任何匹配的组,因此您应该使用submatch(0)

    您的代码中的另一个问题是,您应该先将字符串更改为浮点数,然后进行计算:

    %s/\v\d+[.]\d+/\=str2float(submatch(0))*1000/g
    

    awk

    数字并不总是存在于同一列中,因此任何与 awk 不在画面中。

    这不是真的。您可以检查每一列,如果它与数字格式匹配,则进行数学计算:

    awk '{for(i=1;i<=NF;i++)if($i~/[0-9]+[.][0-9]+/)$i*=1000}7' file
    

    你也可以在你的 vim 中调用 awk:

    %!awk '{for(i=1;i<=NF;i++)if($i~/[0-9]+[.][0-9]+/)$i*=1000}7' 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多