【问题标题】:Dividing float point data in bash在bash中划分浮点数据
【发布时间】:2016-04-15 00:57:19
【问题描述】:

我在两列中有一个数据文件 (input.dat),类似这样

 5.12  .5
 4.1   93.8 
.9     11.2
.58    5.3

我想在第二列值中添加一个常量(例如 5.3)。

我做了 awk '{print $1, $2 + 5.3 }' output.dat

效果很好,output.dat 看起来像

 5.12  5.8
 4.1   99.1 
 .9    16.5
 .58   10.6

但是当我说 a=5.3 并做了:

awk '{print $1, $2 + $a }' output.dat

output.dat 发生了完全疯狂的事情:

5.12  5.62
4.1   97.9 
.9     12.1
.58    5.88

谁能告诉我发生了什么,我认为问题出在打印件上,它只需要 1 美元、2 美元、3 美元等。 我认为如果我在 input.dat 文件的第三列中写入变量 a 然后执行 awk '{ print $1, $2+$3 },我的问题的解决方案是可能的,但是在列上执行浮点算术运算的正确方法是什么在 bash 中?

【问题讨论】:

  • 您必须了解 shell 和 awk 之间的区别——它们是两种完全不同的工具。阅读 Arnold Robbins 所著的《Effective Awk Programming, 4th Edition》一书。
  • 谢谢,我刚开始使用 bash,我设法编写了几个简洁的脚本来分析我的数据,但是当我想解决问题时,我总是在使用 sed/grep/awk/cut 时遇到困难.
  • 但这些正是您分析数据所需的工具,尤其是 awk(如果您知道 awk,那么您就不需要其他工具了)所以如果您编写了几个简洁的脚本知道如何使用这些工具就像在不知道如何使用锤子、锯子和螺丝刀的情况下建造一个整洁的房子 - 你可能会制作一些东西来挡雨,但它会出现一些问题!如果您在整洁的脚本中编写了任何 shell 循环,请参阅 unix.stackexchange.com/q/169716/133219

标签: bash awk sed grep cut


【解决方案1】:

awk -v a=5 '{print $1,$2+a}' input.dat

【讨论】:

  • 谢谢,它可以工作,虽然我的变量依赖于其他变量,但我这样做了:awk -v a=$a '{print $1,$2+a}' input.dat 我可以声明变量其他任何地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多