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

以下は、Michael の 2 番目の例の単純化されたバージョンです。

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 に答える