如何从列中减去常数

时间:2010-07-31 03:28:09

标签: awk subtraction

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

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

$ 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

3 个答案:

答案 0 :(得分:23)

你基本上有用,你只是没有输出它。这将输出您想要的内容:

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

您也可以稍微聪明一点,不要对转移金额进行硬编码:

awk '{
       if(NR == 1) {
           shift = $1
       }

       print ($1 - shift) " " $2
}' file 

答案 1 :(得分:12)

你走在正确的轨道上:

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

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

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

答案 2 :(得分:1)

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-