Назад | Перейти на главную страницу

Как показать строки, где uniq больше 3

У меня есть файл, в котором надо сделать "uniq" и показать результат. Мой файл:

178.57.66.225 fxsciaqulmlk
178.57.66.225 fxsciaqulmlk
178.57.66.225 fxsciaqulmlk
178.57.66.225 faaaaaa11111
178.57.66.215 terdsfsdfsdf
178.57.66.215 terdsfsdfsdf
178.57.66.215 terdsfsdfsdf
178.57.66.205 erdsfsdfsdf
178.57.66.205 erdsfsdfsdf
178.57.66.205 erdsfsdfsdf
178.57.66.205 erdsfsdfsdf
178.57.66.205 abcbbabab
178.57.66.205 abcbbabab
178.57.66.205 abcbbabab
178.56.66.225 fxsciulmla
178.56.66.225 fxsciulmla
178.56.66.225 fxsciulmla
178.57.67.225 faaaa0a1111

Мой сценарий:

for i in $(uniq -c /root/log | awk '{print $1}'); do
if [ $i -gt 2 ]; then
s=$(uniq -c /root/log | awk '$1 == '$i | awk '{print $3}')
ss=$(uniq -c /root/log | awk '$1 == '$i | awk '{print $2}')
echo "The bot is user $s with ip $ss"
fi
done

Все в порядке, но мой вывод неверен:

The bot is user fxsciaqulmlk
terdsfsdfsdf
abcbbabab
fxsciulmla with ip 178.57.66.225
178.57.66.215
178.57.66.205
178.56.66.225
The bot is user fxsciaqulmlk
terdsfsdfsdf
abcbbabab
fxsciulmla with ip 178.57.66.225
178.57.66.215
178.57.66.205
178.56.66.225
The bot is user erdsfsdfsdf with ip 178.57.66.205
The bot is user fxsciaqulmlk
terdsfsdfsdf
abcbbabab
fxsciulmla with ip 178.57.66.225
178.57.66.215
178.57.66.205
178.56.66.225
The bot is user fxsciaqulmlk
terdsfsdfsdf
abcbbabab
fxsciulmla with ip 178.57.66.225
178.57.66.215
178.57.66.205
178.56.66.225

Я делаю это в течение 2-х дней и не могу понять, где ошибаюсь? Пожалуйста помоги.

Когда я увеличиваю количество uniq в состоянии:

if [ $i -gt 2 ]; then

У меня нормальный лог:

The bot is user erdsfsdfsdf with ip 178.57.66.205

Где у меня ошибка?

Если вы хотите подсчитать уникальные строки и показать только те, которые повторяются более 3 раз, вы можете использовать -c вариант uniq лайк:

$ uniq -c /tmp/log | awk '{ if ($1 > 3)  print "The bot is user",$3,"with ip",$2 }'

В awk заполняет вывод, чтобы показать строки с более чем 3-мя повторениями, а затем форматирует вывод по желанию.

Обратите внимание, что для этого необходимо, чтобы файл был уже отсортирован, как видно из вашего сообщения.