【问题标题】:fatal: division by zero attempted in multicolum two files致命:在多列两个文件中尝试除以零
【发布时间】:2020-04-17 16:02:42
【问题描述】:

我正在尝试使用 awk 命令对两个 dat 文件进行一些划分。 但我遇到以下错误

awk:命令。 line:1: (FILENAME=- FNR=72721) fatal: 除零尝试

我使用的代码在这里

paste Bcase1.dat Ecase1.dat | awk '{print $1, $2, $3, $4/$34, $8/$38, $12/$42}' > results.dat

我的文件附在这里

https:Xt-vpB8hpSYnh

请将上面链接中的 X 替换为 //we.tl/ (否则我无法发布它,所以我就这么做了)。

理想情况下,输出数据文件“results.dat”的数据范围应最大为 1.64205,但在出错后它会在 1.33355 处停止,并且在此数字之后(对应于第一列),sript 会停止。

如果有任何简单的解决方法,请帮助我。我会很感激你。

【问题讨论】:

标签: awk


【解决方案1】:

好吧,错误消息告诉您问题出在哪里:在第 72721 行发生了除以零。 您应该通过 if-else-condition 进行检查:

paste Bcase1.dat Ecase1.dat | awk '{print $1, $2, $3, (($34 == 0) ? "NaN" : $4/$34), ($38 == 0) ? "NaN" : $8/$38, ($42 == 0) ? "NaN" : $12/$42}' 

对于第 72721 行,这会给你

1.33405 10.0000 -0.00112531 NaN NaN NaN

请注意,大约有 14 行带有“除以零”。

【讨论】:

  • 亲爱的 F. Knorr, 感谢您回答我的问题。如果我遇到任何错误,我会回复你。我检查了 NaN 错误,并在下一步中使用 sed 命令将此 NaN 错误替换为 0.000。
  • @astha 在 awk 脚本中简单地插入 0.000,而不是在 awk 脚本中插入 NaN,然后​​将其传送到 sed 以将每个 NaN 更改为 0.000,这不是更有意义吗?
  • 亲爱的@EdMorton 我不这么认为。因为在使用脚本之前它会再次产生致命错误,我不希望在我的最终数据中出现 NaN。
  • @astha : Ed Morton 的意思是,你不能简单地运行 paste Bcase1.dat Ecase1.dat | awk '{打印 $1, $2, $3, (($34 == 0) ? "0.000" : $4/$34), ($38 == 0) ? “0.000”:8 美元/38 美元,(42 美元 == 0)? "0.000" : $12/$42}'
  • @F.Knorr 哦,很抱歉我没能得到它。非常感谢。我现在明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 2020-05-29
相关资源
最近更新 更多