bash-script (Как можно упростить?)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
Аватара пользователя
BuGfiX
Сообщения: 78
ОС: slackware-current
Контактная информация:

bash-script

Сообщение BuGfiX »

В общем, тривиальнейшая задачка, есть лог clamav, нужно посчитать количество каждого из вирусов, найденных им.
для тех кто незнает как выглядит лог, пример:

Код: Выделить всё

.....
Thu Jul 20 11.45.27 2006 -> /var/tmp/clamav-54534545tsfd/msg.6n7f9: OK
Thu Jul 20 11.45.27 2006 -> /var/tmp/clamav-54534545tsfd/msg.4fd4d: Worm.BeagleFool.P FOUND
....


Я решаю это так:

Код: Выделить всё

#!/bin/sh
FILE=/var/log/clamav/clamd.log
ALL=`cat $FILE | grep FOUND | awk '{print $8}' | sort | uniq`
for i in $ALL do
    COUNT=`cat $FILE | grep $i | wc -l`;
    echo -e "$i\t$COUNT";
done


Мне интересно, как с подобными вещами справляются другие, может есть более простое и красивое решение?
Спасибо сказали:
Аватара пользователя
sergius
Сообщения: 782

Re: bash-script

Сообщение sergius »

cat $FILE | grep FOUND | awk '{print $8}' | uniq -c | sort -r

man uniq ;)
Спасибо сказали:
jsv
Сообщения: 67

Re: bash-script

Сообщение jsv »

sergius писал(а):
20.07.2006 13:46
cat $FILE | grep FOUND | awk '{print $8}' | uniq -c | sort -r

man uniq ;)

Я бы ещё cat|grep|awk заменил на
awk '/FOUND/ {print $8}' $FILE
:)
Спасибо сказали:
Аватара пользователя
BuGfiX
Сообщения: 78
ОС: slackware-current
Контактная информация:

Re: bash-script

Сообщение BuGfiX »

спасибо за ответы ;)
в итоге все вылилось в одну строчку:

Код: Выделить всё

awk '/FOUND/ {print $8}' /var/log/clamav/clamd.log | sort | uniq -c | sort -r


как говорится - век живи, век читай маны ))
Спасибо сказали:
Аватара пользователя
sergius
Сообщения: 782

Re: bash-script

Сообщение sergius »

BuGfiX писал(а):
20.07.2006 14:04
спасибо за ответы ;)
в итоге все вылилось в одну строчку:
awk '/FOUND/ {print $8}' /var/log/clamav/clamd.log | sort | uniq -c | sort -r
как говорится - век живи, век читай маны ))


Код: Выделить всё

awk '/FOUND/ {print $8}' /var/log/clamav/clamd.log | uniq -c | sort -r


Два сорта не нужны ;)
Спасибо сказали:
Аватара пользователя
BuGfiX
Сообщения: 78
ОС: slackware-current
Контактная информация:

Re: bash-script

Сообщение BuGfiX »

> Два сорта не нужны ;)

Нужны. Иначе uniq не выкидывает лишние строчки, а просто дублирует.
Спасибо сказали:
Аватара пользователя
sergius
Сообщения: 782

Re: bash-script

Сообщение sergius »

BuGfiX писал(а):
20.07.2006 17:17
> Два сорта не нужны ;)
Нужны. Иначе uniq не выкидывает лишние строчки, а просто дублирует.

Разве? Что-то я забыл :)

Тогда так: ;)

Код: Выделить всё

awk '/FOUND/ {print $8}' /var/log/clamav/clamd.log | sort -r | uniq -c
Спасибо сказали:
Аватара пользователя
BuGfiX
Сообщения: 78
ОС: slackware-current
Контактная информация:

Re: bash-script

Сообщение BuGfiX »

sergius писал(а):
20.07.2006 17:23
Тогда так: ;)

Код: Выделить всё

awk '/FOUND/ {print $8}' /var/log/clamav/clamd.log | sort -r | uniq -c

так то оно так, работает, не спорю =)
просто вариант с 2-мя sort-ами выводит рейтинг (т.е. сортирует по количеству в пор. убывания), а с одним - в том порядке в котором они встречаются.
Спасибо сказали:
Аватара пользователя
sergius
Сообщения: 782

Re: bash-script

Сообщение sergius »

awk '/FOUND/ {print $8}' /var/log/clamav/clamd.log | sort | uniq -c | sort -rn

Тогда, так будет еще лучше. Иначе номера будет сортировать следующим образом:
1
10
2
20
3
30
Спасибо сказали:
Ответить