🗂

[SadServers] 解説 "Saskatoon": counting IPs.

に公開
3

Discussion

l1i1i1i1l1i1i1i1
cat /home/admin/access.log   | cut -d' ' -f 1 | sort  | uniq -c  | sort

これと

cat /home/admin/access.log   | cut -d' ' -f 1 | uniq -c  | sort

このコマンドの結果ってなんで異なるんですかね?後者だと次のような結果が返ってきます

     41 199.168.96.66
     41 50.139.66.106
     42 130.237.218.86
     49 130.237.218.86
     49 75.97.9.59
     50 75.97.9.59
     85 130.237.218.86
     89 130.237.218.86
     97 75.97.9.59
kenmakenma

uniq は 同じ行が連続している行の重複を取り除きます。 つまり、ソートしていないと、期待通り動きません。なので、 uniq の間に sort が必要です。

https://linuxjm.osdn.jp/html/GNU_textutils/man1/uniq.1.html

uniq に与える入力はソートされていなければならない。比較は連続した行の間での み行われる。

例えば、text.txt が、次のように、 130.237.218.86 の間に 1.1.1.1が挟まれていると、

 130.237.218.86 
 130.237.218.86 
 1.1.1.1 
 130.237.218.86 
 130.237.218.86 
 130.237.218.86 
cat test.txt | uniq -c 
   2  130.237.218.86
   1  1.1.1.1
   3  130.237.218.86

のように、1.1.1.1で分断されているので、前半で130.237.218.86が2回。 後半で130.237.218.86が3回存在していると出力されます。
これを回避するために、予めsortします。

l1i1i1i1l1i1i1i1

なるほど!連続している場合に削除して数えているんですね!なるほどです,ありがとうございます!