我想知道是否可以在一个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