24

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

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

$ 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
4

4 回答 4

29

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

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

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

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

       print ($1 - shift) " " $2
}' file 
于 2010-07-31T03:32:18.630 回答
12

你走在正确的轨道上:

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

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

awk 'NR == 1 {origin = $1} {$1 = $1 - origin; print}' file
于 2010-07-31T03:57:17.687 回答
1

bash 外壳脚本

#!/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-
于 2010-07-31T04:06:02.870 回答
0

在 vim 中,您可以选择列并使用 G 转到页面底部,然后使用 e 转到数字的末尾,然后您可以输入数字,例如 56 56 这将在列中添加 56

于 2021-10-15T23:35:43.580 回答