2013-11-28 76 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 
相关问题