计算文件中两个数字之间的差异

时间:2013-11-28 16:25:02

标签: bash

我想知道是否可以在一个bash命令行中计算两个不同行中的文件中包含的两个浮点数之间的差异。

文件内容示例:

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

我想回复一下123654.987-123456.789

这可能吗?这个神奇的命令行是什么?

谢谢!

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 ... OS特定的安装:)

答案 2 :(得分: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

答案 3 :(得分:0)

这是一种奇怪的方式:

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