ログファイルで経時的なクリック率を計算する[閉じる]

ログファイルで経時的なクリック率を計算する[閉じる]

使用される仮想メモリの量(最大1 MB)を減らすために、オフコア分割征服アルゴリズムを実装するUNIXユーティリティを使用する必要があります。 Apacheログファイルである大規模なデータセットがあります。すべてのIPアドレスと日付(Unix時間に変換)を抽出し、それをHitsというCSVファイルに保存できました。

ip,timestamp
62.172.72.131,1041502001    
62.121.107.115,1041809792
163.28.16.1,1043258352
216.37.59.126,1044304131
68.104.188.224,1044472900
66.137.118.69,1044543502
62.172.72.131,1041502098
207.181.42.20,1044646708
205.156.184.254,1045670100
80.225.248.61,1045779615
200.44.24.157,1046214366
193.63.247.68,1046260886
66.176.248.72,1046317786
216.249.85.109,1046566502
68.44.222.12,1046638290
130.113.69.66,1048009156
143.43.220.157,1048026293

これで、IP、時間、クリック数を含むセッションファイルを作成する必要があります。各クラスは30分間行われます。たとえば、ヒットの場合は、62.172.72.131ファイルを検索し、そのIPアドレスを含むすべてのヒットを見つけて、そのセッションに存在することを確認する必要があります。 7番目のヒットは対応するIPアドレスを持ち、30分以内であるため、セッションファイル1041502097 - 1041502001 = 97 secに書き込む必要があります。62.172.72.131,97,2これを行うには、IPアドレスでグループ化し、そのIPアドレスのセッションを計算する必要があります。つまり、セッションは30分で、IPアドレスがそのセッションの外にある場合(> 1800秒)、新しいセッション行を作成する必要があります。

私は次のコードを書いた

awk 'BEGIN { FS=OFS=SUBSEP=","}{arr[$1]= $2 }END {for (i in arr) {...}}' hits.csv | sort -n 

現在はセッション数をどのように計算するのかわからず、iとarr [i]を出力するとすべての重複が消えます。 IPアドレスで並べ替えると、同じIPで発生したすべてのヒットが順番に表示されると思いました。

答え1

あなたに本当に必要なものが何であるかよくわかりません。これはほとんど答えではなく貢献です。

次に、「セッション」の数を数え、クリックa[session][ip]数を数えます。

#!/usr/bin/gawk -f

BEGIN  { FS=OFS="," }
       { session = int($2/1800); a[session][$1] ++ }
END    { for(session in a){
           for(ip in a[session]){
               print a[session][ip], ip , session
           }
         }
       }

メモ:

  • 1800 = 30m * 60秒
  • 役立つ場合は、並べ替えて印刷してください。print a[session][ip], ip , session | "sort -Vr"

関連情報