Подтвердить что ты не робот

Сортировка IP-адреса uniq из журнала Apache

Я пытаюсь извлечь IP-адреса из своего журнала apache, посчитать их и отсортировать.

И по какой-то причине сортировочная часть ужасна.

Вот команда:

cat access.* | awk '{ print $1 }' | sort | uniq -c | sort -n

Пример вывода:

  16789 65.X.X.X
  19448 65.X.X.X
   1995 138.X.X.X
   2407 213.X.X.X
   2728 213.X.X.X
   5478 188.X.X.X
   6496 176.X.X.X
  11332 130.X.X.X

Я не понимаю, почему эти значения действительно не отсортированы. Я также пытался удалить пробелы в начале строки (sed 's/^[\t ]*//g') и используя sort -n -t" " -k1, что ничего не меняет.

Любые подсказки?

4b9b3361

Ответ 1

Это может быть запоздалым, но использование числового в первом сортировке даст вам желаемый результат,

cat access.log | awk '{print $1}' | sort -n | uniq -c | sort -nr | head -20

Выход:

 29877 93.xxx.xxx.xxx
  17538 80.xxx.xxx.xxx
   5895 198.xxx.xxx.xxx
   3042 37.xxx.xxx.xxx
   2956 208.xxx.xxx.xxx
   2613 94.xxx.xxx.xxx
   2572 89.xxx.xxx.xxx
   2268 94.xxx.xxx.xxx
   1896 89.xxx.xxx.xxx
   1584 46.xxx.xxx.xxx
   1402 208.xxx.xxx.xxx
   1273 93.xxx.xxx.xxx
   1054 208.xxx.xxx.xxx
    860 162.xxx.xxx.xxx
    830 208.xxx.xxx.xxx
    606 162.xxx.xxx.xxx
    545 94.xxx.xxx.xxx
    480 37.xxx.xxx.xxx
    446 162.xxx.xxx.xxx
    398 162.xxx.xxx.xxx

Ответ 2

Зачем использовать cat | awk? Вам нужно использовать awk:

awk '{ print $1 }' /var/log/*access*log | sort -n | uniq -c | sort -nr | head -20

Ответ 3

Я не знаю, почему простой sort -n не работал, но добавление нецифрового символа между счетчиком и IP-адресом проблемы.

cat access.* | awk '{ print $1 } ' | sort | uniq -c | sed -r 's/^[ \t]*([0-9]+) (.*)$/\1 --- \2/' | sort -rn

Ответ 4

Это должно работать

cat access.* | awk '{ print $1 }' | sort | awk '{print $1 " " $2;}' | sort -n

Я не вижу проблемы.

Управляющие символы в файлах?

Полная файловая система (файлы temp)?