在我们的服务器上,一个 cronjob 记录了共享目录中的文件计数。日志的形式如下:
2003-07-03T16:05 279
2003-07-03T16:10 283
2003-07-03T16:15 282
到目前为止,该文件已拥有超过一百万个条目。我有兴趣找到我们曾经经历过的最大的变化(消极的和积极的)。我可以编写一个程序来找到这个,但是有没有一些工具可以给我一个增量列表?
原始文件位于 Solaris 上,但我在 Linux Mint 系统上有该文件的副本。
答案1
答案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}'