2010-07-31 58 views
15

有沒有辦法從列的所有值中減去最小值?我需要從第一列中的所有其他數字中減去第一列中的第一個數字。如何從列中減去一個常數

我寫這個劇本,但它不能做出正確的結果:

$ 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 

回答

19

什麼你基本上是工作,你只是沒有將其輸出。這將輸出你想要什麼:

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

您也可以稍微聰明,而不是硬編碼的偏移量:

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

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

你在正確的軌道上:

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

這裏邁克爾第二個例子的簡化版本:

awk 'NR == 1 {origin = $1} {$1 = $1 - origin; print}' file 
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-