ファイルの数の増加

ファイルの数の増加

私たちのサーバーでは、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

最大の違いを持つ2行を表示します。

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}'

関連情報