从文本文件中提取数字并进行算术运算

Extract numbers from a text file and do arithmetic operations

程序完成后,我得到一个输出文件(FILE),其中包含两个连续的行,包括单词“number”。

...some texts...
number1    3.145
number2    1.56
...some texts...

只有FILE中的两行包含“数字”。这些值因计算的输入文件而异。有时程序会以科学计数法打印值,例如 6.145E-03.

我想做的是从这两行中提取两个值,并使用 bash 命令进行一些算术运算。例如,假设这两个值为 $num1$num210*($num1 + $num2)/($num1 - $num2)。 我认为 awk 对这个问题有答案。


p.s.

如果不考虑科学记数法导致更简单的答案,我会尝试该解决方案。科学记数法只出现一些可以忽略的特例。

假设此问题的唯一目的是使用 awk 解析文件并对从文件中提取的值执行一些数学运算...

相同的假设:

  • 我们想要匹配以字符串 number
  • 开头的行
  • 我们总能从输入文件
  • 中找到 ^number 的 2 个匹配项
  • 如果 ^number 的匹配项超过 2 个,则表示匹配项将被忽略

一个awk想法:

awk '
/^number/  { num[++i]= }
END        { print (10 * (num[1] + num[2]) / (num[1] - num[2]) ) }
' file.dat

这会生成:

-17.3874

要更改输出格式,我们可以使用标准 printf 格式,例如:

awk '
/^number/  { num[++i]= }
END        { printf "%.2f\n", (10 * (num[1] + num[2]) / (num[1] - num[2])) }
' file.dat

这会生成:

-17.39

注意: - 如果对输入数据的可靠性有任何顾虑,OP 可以添加健全性检查(例如,在匹配行上是字段 #2(</code>) 实际上是一个数字?如果 <code>num[1] - num[2] == 0 导致 'divide by 0' 错误怎么办?)