我想知道是否可以在一個bash命令行中的兩條不同行中計算文件中包含的兩個浮點數之間的差異。計算文件中兩個數字之間的差異
文件內容例如:
Start at 123456.789
...
...
...
End at 123654.987
我想這樣做的123654.987-123456.789
回聲這可能嗎?這個神奇的命令行是什麼?
謝謝!
我想知道是否可以在一個bash命令行中的兩條不同行中計算文件中包含的兩個浮點數之間的差異。計算文件中兩個數字之間的差異
文件內容例如:
Start at 123456.789
...
...
...
End at 123654.987
我想這樣做的123654.987-123456.789
回聲這可能嗎?這個神奇的命令行是什麼?
謝謝!
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
,你可以用這個命令做到這一點:
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來安裝它...操作系統特定的:)
這個答案給出了更準確的結果!謝謝! – Guile
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
這裏有一個奇怪的方式:
printf -- "-%s+%s\n" $(grep -oP '(Start|End) at \K[\d.]+' file) | bc
爲什麼要使用'
anubhava
你做到了Adam Liss!謝謝! – Guile