用awk做数学

数学杰里米mikkola

我一直在使用awk,但通常只是为了方便地从正在处理的数据中提取特定字段。不管使用什么分隔符,awk都可以很容易地提取您所需要的东西。但除了这个明显的特性,语言还有很多其他特性。awk可以提供的服务之一是进行一系列数学计算的能力——比如余弦和平方根——比您想象的要容易。

首先,试试这个。你可以打印一个数字的整数部分(也就是说,不是整数),通过这样做:

$ awk 'BEGIN{> print int(12.789);>}’12

显然,如果您在命令行上这样做,您不会感到不安,但是在编写脚本时,同样的逻辑非常方便。

您可以轻松地打印一个数字的对数。

$ awk 'BEGIN{> print log(111) >}

那么输出一个数的平方根呢?

$ awk 'BEGIN{> print sqrt(25) >}

您还可以构建awk脚本来对一个满是数字的文件执行计算,就像对一个数字进行计算一样简单。

整数:

{打印int(1美元);}

该脚本将打印文件中每行开头的数字的整数部分。

根:

{打印sqrt(1美元);}

如果数字不是每一行的第一个数字,将$1改为$2或$3,等等。

在查看数字文件后运行我们的脚本:

$ $ awk -f getInt numbers 12 54 4 25 $ awk -f getSqRt numbers 3.51355 7.37028 2

并且,如果分隔符不是某种形式的空白,在BEGIN语句中指定字段分隔符,如下所示:

$ cat getqrt2 BEGIN {FS=":"} {print sqrt($2);} $

在下面的代码行中,我们在一个数字文件上运行上面所示的脚本,其中数字是第二个字段,字段之间用冒号分隔。

首先,数字

$ cat nums top:12.345 bottom:54.321 right:4 left:25

结果:

$ awk -f getqrt2 nums 3.51355 7.37028 2
  • Int (x)——最接近x的整数
  • √x,正的√x
  • Exp (x) - x (e ^ x)的指数或一个错误,如果x是超出范围
  • Log (x)——x的自然对数(只要x是正数)
  • Sin (x)也就是Sin x
  • Cos (x) cosx
  • Atan2 (y, x) arctan (y / x
  • Rand()——一个随机数——总是在0和1之间
  • Srand (x)——设置随机数的起始点

最后,这里是“maybe”命令的一个实现,几年前,一些Unix人士还在嘲笑这个命令。maybe命令会从“yes”到“no”不等。这个实现是通过awk命令完成的。它会随机回答“是”或“不是”——有点像扔硬币。

#!/bin/bash ans= ' awk -vmin=0 -vmax=1 'BEGIN{srand();打印int (min + rand() *(极大极小+ 1))}“如果(ans eq 0美元);然后echo "no"否则echo "yes" fi

《sed & awk》这本书是我读过的第一本O'Reilly的书,这些工具在几十年前把我吸引到Unix世界中起了关键作用。但awk的功能比我记忆中的要完整。我太习惯于使用它从任意数据中选择列,有时忘记了它自己能做多少处理。

加入网络世界社区足球竞猜app软件脸谱网LinkedIn对自己最关心的话题发表评论。

版权©2015足球竞彩网下载

工资调查:结果在