2013-11-28 79 views
0

我想知道是否可以在一個bash命令行中的兩條不同行中計算文件中包含的兩個浮點數之間的差異。計算文件中兩個數字之間的差異

文件內容例如:

Start at 123456.789 
... 
... 
... 
End at 123654.987 

我想這樣做的123654.987-123456.789

回聲這可能嗎?這個神奇的命令行是什麼?

謝謝!

回答

2
awk ' 
    /Start/ { start = $3 }  # 3rd field in line matching "Start" 
    /End/ { 
    end = $3;     # 3rd field in line matching "End" 
    print end - start   # Print the difference. 
    } 
' < file 

如果你真的想這樣做,在一行:

awk '/Start/ { start = $3 } /End/ { end = $3; print end - start }' < file 
+2

爲什麼要使用' anubhava

+0

你做到了Adam Liss!謝謝! – Guile

2

,你可以用這個命令做到這一點:

start=`grep 'Start' FILENAME| cut -d ' ' -f 3`; end=`grep 'End' FILENAME | cut -d ' ' -f 3`; echo "$end-$start" | bc 

您需要爲 'BC' 計劃這個(用於浮點數學)。你可以用apt-get install bc,或yum或rpm,zypper來安裝它...操作系統特定的:)

+1

這個答案給出了更準確的結果!謝謝! – Guile

1

Bash不支持浮點運算。但是你可以將你的數字分成幾部分並執行整數運算。例如:

#!/bin/bash 
echo $((${2%.*} - ${1%.*})).$((${2#*.} - ${1#*.})) 

結果:

./test.sh 123456.789 123654.987 
198.198 

編輯:

正確的解決方案將被使用而不是命令行劈,但工具設計或執行FP操作。例如,bc

echo 123654.987-123456.789 | bc 

輸出:

198.198 
0

這裏有一個奇怪的方式:

printf -- "-%s+%s\n" $(grep -oP '(Start|End) at \K[\d.]+' file) | bc 
相關問題