Shellでの重量除去と統計繰返し数uniq-cが有効でない問題

2832 ワード

あれは夜中に寝たくなくて、突然自分のウェブサイトのUVとip数の統計を見て、typechoプラグインの統計は私自身もshellスクリプトの統計nginxログを再統計するかどうか分かりません
    cat www.libenfu.com.access.log |cut -d ' ' -f 1 |uniq -c|sort -n -r|head -n 100

このスクリプト統計のクエリnginxログの中で最もアクセスの多い最初の100のip、BUTこのshell統計は問題があります
[root@bf logs]#sh ipBy.sh 
   5894 123.57.32.54
   4115 123.57.32.54
   3602 123.57.32.54
   3221 123.57.32.54
   3110 103.233.131.130
   2200 123.57.32.54
   2162 123.57.32.54
   1623 123.57.32.54
   1501 123.57.32.54

繰り返される...
合計11 Wのログ統計123.57.32.54 ip 3 Wこの2量は少し大きい上にスクリプト統計に問題があります
    [root@bf logs]#cat www.libenfu.com.access.log |wc -l
    112317
    [root@bf logs]#cat www.libenfu.com.access.log |grep 123.57.32.54 |wc -l
    34025

別のデリバリーコマンドsort-uを使用して試してみます
    [root@bf logs]#cat www.libenfu.com.access.log |cut -d ' ' -f 1 |sort -u |wc -l
    5125

ip数は合計5125ですが、私は方法を考えてすべてのipのアクセス数を統計します.前回のシナリオはuniq-cが力を入れなかったので、uniqには数の制限があるのではないかと思います.
まとめてuniqとsort-u機能のような脱重
私は自分のshell問題を分析してuniq-cに出るべきです.
  [root@bf logs]#tail -n 60000  www.libenfu.com.access.log |cut -d ' ' -f 1 |uniq -c |sort -n -r -k 4 -t ' ' |head -n 20

  2200 123.57.32.54
  1501 123.57.32.54
  1018 123.57.32.54
  1000 123.57.32.54
  601 123.57.32.54
  451 123.57.32.54
  219 5.9.88.103
  169 62.210.251.247
  166 178.202.133.114
  151 209.58.178.145
  151 163.172.68.136

5 wでOKなのは123.57ではありません.32.54このipは私自身がab圧力測定を使ってやったのです.穴があいた
    123.57.32.54 - - [17/Feb/2017:12:35:15 +0800] "GET / HTTP/1.0" 503 206 "-" "ApacheBench/2.3" "-" "-" 

これがドンドン
寝る前に中国語のマニュアルのuniqの説明をよく見ました.
説明
Uniqコマンドは、ファイル内の重複行を削除します.Uniqコマンドは、InFileパラメータで指定された標準入力またはファイルを読み込みます.このコマンドは、まず隣接するローを比較し、2番目のローとローの後続のコピーを除去します.繰り返される行は必ず隣接します.(uniqコマンドを発行する前に、sortコマンドを使用してすべての重複行を隣接させます.)最後に、uniqコマンドは最終的に個別の行を標準出力またはOutFileパラメータで指定されたファイルに書き込みます.InFileとOutFileパラメータは異なるファイルを指定する必要があります.入力ファイルが「-」表示すると、標準入力から読み出されます.入力ファイルはテキストファイルでなければなりません.テキストファイルは、1行または複数行に整理された文字を含むファイルです.これらの行の長さは、2048バイト(すべての改行文字を含む)を超えることはできません.空の文字は含まれません.
Uniqコマンドを発行する前に、sortコマンドを使用してすべての重複行を隣接させます.
問題はここで私の統計スクリプトの中でipにアクセスするのはきっと隣接していないことです.uniqの重み付け原理は隣接する重み付け統計を下に探すのも同じです.すべての問題はsortが先にshellの内容を変更していないことです.
    [root@bf logs]#cat www.libenfu.com.access.log |cut -d ' ' -f 1 |sort -r |uniq -c |sort -n -r  |head -n 10
    34025 123.57.32.54
     5989 106.38.241.151
     5388 103.233.131.130
     2200 123.56.150.61
     1941 203.208.60.193
     1865 203.208.60.196
     1823 203.208.60.194
     1796 203.208.60.195
     1785 203.208.60.197
     1278 216.244.66.232

重复に成功する前にsortソートを使ってipを隣接させて私の望む统计に达させて、问题は难しくなくて命令の学习のしっかりしていません.