【问题标题】:How to subtract a constant number from a column如何从列中减去一个常数
【发布时间】:2011-03-23 13:02:28
【问题描述】:

有没有办法从一列的所有值中减去最小值?我需要从第一列中的所有其他数字中减去第一列中的第一个数字。

我写了这个脚本,但它没有给出正确的结果:

$ awk '{$1 = $1 - 1280449530}' file 
1280449530 452
1280449531 2434
1280449531 2681
1280449531 2946
1280449531 1626
1280449532 3217
1280449532 4764
1280449532 4501
1280449532 3372
1280449533 4129
1280449533 6937
1280449533 6423
1280449533 4818
1280449534 4850
1280449534 8980
1280449534 8078
1280449534 6788
1280449535 5587
1280449535 10879
1280449535 9920
1280449535 8146
1280449536 6324
1280449536 12860
1280449536 11612

【问题讨论】:

    标签: awk subtraction


    【解决方案1】:

    你所拥有的基本上是有效的,你只是没有输出它。这将输出你想要的:

    awk '{print ($1 - 1280449530) " " $2}' file
    

    你也可以稍微聪明一点,而不是硬编码移位量:

    awk '{
           if(NR == 1) {
               shift = $1
           }
    
           print ($1 - shift) " " $2
    }' file 
    

    【讨论】:

      【解决方案2】:

      你是在正确的轨道上:

      awk '{$1 = $1 - 1280449530; print}' file
      

      这是迈克尔第二个例子的简化版本:

      awk 'NR == 1 {origin = $1} {$1 = $1 - origin; print}' file
      

      【讨论】:

        【解决方案3】:

        bash shell 脚本

        #!/bin/bash
        
        exec 4<"file"
        read col1 col2<&4
        while read -r n1 n2 <&4
        do
          echo $((n1-$col1))
          # echo "scale=2;$n1 - $col1" | bc # dealing with decimals..
        done
        exec >&4-
        

        【讨论】:

          【解决方案4】:

          在 vim 中,您可以选择列 并转到页面底部 G 然后 e 走到号码的末尾 然后你可以输入像 56 这样的数字 56 这会将 56 添加到列中

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多