从文本文件中提取数字并进行算术运算
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
和 $num2
、10*($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' 错误怎么办?)
程序完成后,我得到一个输出文件(FILE
),其中包含两个连续的行,包括单词“number”。
...some texts...
number1 3.145
number2 1.56
...some texts...
只有FILE
中的两行包含“数字”。这些值因计算的输入文件而异。有时程序会以科学计数法打印值,例如 6.145E-03
.
我想做的是从这两行中提取两个值,并使用 bash 命令进行一些算术运算。例如,假设这两个值为 $num1
和 $num2
、10*($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' 错误怎么办?)