我想知道是否可以在一个bash命令行中计算两个不同行中的文件中包含的两个浮点数之间的差异。
文件内容示例:
Start at 123456.789
...
...
...
End at 123654.987
我想回复一下123654.987-123456.789
这可能吗?这个神奇的命令行是什么?
谢谢!
答案 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