文件中数字的增量

文件中数字的增量

在我们的服务器上,一个 cronjob 记录了共享目录中的文件计数。日志的形式如下:

2003-07-03T16:05 279
2003-07-03T16:10 283
2003-07-03T16:15 282

到目前为止,该文件已拥有超过一百万个条目。我有兴趣找到我们曾经经历过的最大的变化(消极的和积极的)。我可以编写一个程序来找到这个,但是有没有一些工具可以给我一个增量列表?

原始文件位于 Solaris 上,但我在 Linux Mint 系统上有该文件的副本。

答案1

如果你有包裹num-utils安装后,您可以执行以下操作:

cut -d ' ' -f 2 inputfile | numinterval | sort -u 

第一个和最后一个数字分别给出了最小值。最大变化。

如果该列表太长并且您还有moreutils安装后你可以执行以下操作:

cut -d ' ' -f 2 inputfile | numinterval | sort -u | pee "tail -1" "head -1"

在 Mint 上您应该能够安装这些软件包,在 Solaris 上您可能必须从源代码进行编译。

答案2

$ awk 'BEGIN{last=0}{delta[NR]=$2-last; last=$2; print $0" "delta[NR]}' file

会给你

2003-07-03T16:05 279 279
2003-07-03T16:10 283 4
2003-07-03T16:15 282 -1

最后一列有增量,所以要找到最大的,只需通过管道进行排序

$ awk 'BEGIN{last=0}{delta[NR]=$2-last; last=$2; print $0" "delta[NR]}' file | sort -k3n
2003-07-03T16:15 282 -1
2003-07-03T16:10 283 4
2003-07-03T16:05 279 279

但对于数百万个条目来说,这将非常慢。我可能会使用mysql或其他数据库代替。

答案3

显示差异最大的两条线

awk '{c=$2-a[2];
      if(c<0)c=-c;
      if(+a[2]&&c>b){b=c;d=a[1]" "a[2]"\n"$0};
      split($0,a," ")}
  END{print "Difference is",b,"between:\n"d}'

相关内容