Я ищу инструмент командной строки, работающий с потоком строк (обычно tail -f) и подсчитывающий их как: tail -f /var/log/apache2/access.log | вырезать -d '' -f1 | SOME_COMMAND и отображение вида сверху как:
52 xxx.xxx.xxx.xxx 12 xxx.xxx.xxx.xxx 6 xxx.xxx.xxx.xxx 2 xxx.xxx.xxx.xxx
Это могло быть так удобно, например, связанное с этим sh:
#!/bin/sh
# NCSA structure :
#IP - - [DATE] "METHOD URL HTTP/VERSION" STATUS LENGTH "REFERER" "USER AGENT"
QUERY=""
while [ "$1" ] ; do
case "$1" in
ip) QUERY="$QUERY"'\1' ;;
date) QUERY="$QUERY"'\4' ;;
method) QUERY="$QUERY"'\5' ;;
url) QUERY="$QUERY"'\6' ;;
version) QUERY="$QUERY"'\7' ;;
status) QUERY="$QUERY"'\8' ;;
length) QUERY="$QUERY"'\9' ;;
referer) QUERY="$QUERY"'\10' ;; # Does not work...
useragent) QUERY="$QUERY"'\11' ;; # Does not work
*) QUERY="$QUERY""$1" ;;
esac
shift
done
sed -r 's/^([^ ]+) ([^ ]+) ([^ ]+) \[([^]]+)] "([^ ]+) ([^"]+) HTTP\/([^"]+)" ([^ ]+) ([^ ]+) "([^"]+)" "([^"]+)"$/'"$QUERY"'/g'
С помощью этой команды я ищу и мой сценарий вы можете сделать: cat somelog | ncsa.sh url | SOME_COMMAND и получите верхнюю часть просмотренного url'z, или реферера, или того, что вы хотите
(и если кто-то может исправить ошибку \ 10, интерпретируемую как \ 1, за которой следует 0 ...: p)
Хорошего дня !
Первая версия программы, решающей эту проблему, написана здесь:
Ты ищешь uniq -c и tr ?
cat /var/log/apache2/access.log | cut -d' ' -f1 | uniq -c | tr -s "\n " " "
Из уникальный страница руководства:
Filter adjacent matching lines from INPUT (or standard input), writing to OUTPUT (or standard output).
-c, --count
prefix lines by the number of occurrences
Из tr страница руководства:
Translate, squeeze, and/or delete characters from standard input, writing to standard output.
-s, --squeeze-repeats
replace each input sequence of a repeated character that is listed in SET1 with a single occurrence of that character
Иметь это отсортированный потомок:
cat /var/log/apache2/access.log | cut -d' ' -f1 | uniq -c | sort -gr | tr -s "\n " " "
Пример вывода (я запутал IP):
87 71.255.255.11 54 95.255.222.255 50 84.255.255.120 50 178.255.255.14 49 92.255.255.240 49 91.255.36.215 49 255.52.126.184 49 217.255.110.23 49 216.255.45.4 49 255.8.27.5
Примечание: Мои примеры используют кошка потому что я не думаю об использовании хвост -f будет работать, поскольку нет Конец файла, но вместо этого вы можете просто использовать хвост -100 например, и делать это периодически.