The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"как подсчитать сколько раз встречалась каждая ошибка"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"как подсчитать сколько раз встречалась каждая ошибка"  +/
Сообщение от как подсчитать сколько раз встречалась каждая ошибка on 12-Сен-12, 18:01 
есть около 52000 файлов, каждый приблизительно по 1 Мб.

в каждой строке каждого файла есть поле т.н. "error code", для получения
awk -F"|" '{print $39}'

Для получения всех уникальных "error code'ов" делаю так:
#!/bin/sh
d=/home/taskmng/bill/charge/abnormal
arr=(`ls $d|tr '\n' ' '`)
for (( i=0;i<${#arr[*]};i++ ))
do
if [ -e $d/${arr[$i]} ]
then
awk -F"|" '{print $39}' $d/${arr[$i]} | sort -u >> tmp
fi
done
cat tmp | sort -u

Задача:
как подсчитать сколько раз во всех файлах (52000) встречалась каждая ошибка?
буду благодарен хотя бы за алгоритм.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "как подсчитать сколько раз встречалась каждая ошибка"  +/
Сообщение от как подсчитать сколько раз встречалась каждая ошибка on 12-Сен-12, 18:20 
немного модифицировал скрипт, так по моему быстрее должно отрабатывать:
#!/bin/sh
d=/.../abnormal
arr=(`ls -rt $d|tail -1000|tr '\n' ' '`)
for (( i=0;i<${#arr[*]};i++ ))
do
if [ -e $d/${arr[$i]} ]
then
    tmp=(`awk -F"|" '{print $39}' $d/${arr[$i]} | sort -u |tr '\n' ' '`)
    for (( a=0;a<${#tmp[*]};a++ ))
    do
        err[${#err[*]}]="${tmp[$a]}"
    done
fi
done
echo ${err[*]}|tr ' ' '\n'|sort -u|tee -a tmp

Я так понимаю процесс подсчета сколько раз встретилась каждая ошибка будет весьма непростым(

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "как подсчитать сколько раз встречалась каждая ошибка"  +/
Сообщение от Etch on 12-Сен-12, 19:58 
man sort
man uniq

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "как подсчитать сколько раз встречалась каждая ошибка"  +/
Сообщение от Andrey Mitrofanov on 12-Сен-12, 22:09 
> есть около 52000 файлов, каждый приблизительно по 1 Мб.

Раз-раз?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "как подсчитать сколько раз встречалась каждая ошибка"  +/
Сообщение от Andrey Mitrofanov on 12-Сен-12, 22:13 
> есть около 52000 файлов, каждый приблизительно по 1 Мб.
>> есть около 52000 файлов, каждый приблизительно по 1 Мб.
> Раз-раз?

[[Чёй-та для зарегистрированных??! Совсем зажрались.]]

[CUT: платный Контент.]

printf"█ %s\n",a[e],e}' |sort -nr

█ --> % 8 d  ///А у Вас квотинг и эскейпинг кривой!  :-P

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "как подсчитать сколько раз встречалась каждая ошибка"  +/
Сообщение от как подсчитать сколько раз встречалась каждая ошибка on 13-Сен-12, 14:11 
> printf"█ %s\n",a[e],e}' |sort -nr
> █ --> % 8 d  ///А у Вас квотинг и эскейпинг кривой!  :-P

Извините не понимаю о чём Вы?

Пока более изящного способа чем этот не придумал:
#!/bin/sh
d=/home/taskmng/bill/charge/abnormal
arr=(`ls -rt $d|tail -1000|tr '\n' ' '`)
case ${#arr[*]} in
0) echo $d
   ls -lrt $d ;;
*) echo -e "from:\t`ls -l $d/${arr[0]}`\nTo:\t`ls -l $d/${arr[$(expr ${#arr[*]} - 1)]}`\nFiles:\t${#arr[*]}"
for (( i=0;i<${#arr[*]};i++ ))
do
if [ -e $d/${arr[$i]} ]
then
    tmp=(`awk -F\| '{print $39}' $d/${arr[$i]} | sort | uniq -c | tr '\n' '@'`)
    for (( a=0;a<${#tmp[*]};a++ ))
    do
        err=( "${err[@]}" "${tmp[$a]}" )
    done
fi
done
tmp=(`echo ${err[*]}|tr '@' '\n'|awk '{print $2}'|sort -u|tr '\n' ' '`)
echo -e "Error\tCount"
for (( i=0;i<${#tmp[@]};i++ ))
do
    count=(`echo ${err[*]} | tr '@' '\n' |awk '{if(index($0,"'${tmp[$i]}'"))print $1}'|tr '\n' ' '`)
    for (( a=0;a<${#count[*]};a++ ))
    do
        let number+=${count[$a]}
    done
    echo -e "${tmp[$i]}\t$number"    #|tee -a tmp
    unset number
done ;;
esac

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "как подсчитать сколько раз встречалась каждая ошибка"  +/
Сообщение от Andrey Mitrofanov on 13-Сен-12, 20:33 
>> printf"█ %s\n",a[e],e}' |sort -nr
>> █ --> % 8 d  ///А у Вас квотинг и эскейпинг кривой!  :-P
> Извините не понимаю о чём Вы?

Это разговоры с форумом при обострении. Не обращайте.

> Пока более изящного способа чем этот не придумал:

Ну, нет, так нет. Мне форум пишет, чтобы я шёл... регистрироваться.

Поэтому решение одной строкой из 90~ символов продолжает оставаться "платным контентом".

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "как подсчитать сколько раз встречалась каждая ошибка"  +/
Сообщение от Pahanivo (ok) on 14-Сен-12, 09:03 
cat *allfiles* | awk -F"|" '{print $39}' | sort | uniq -c | sort -n
Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "как подсчитать сколько раз встречалась каждая ошибка"  +/
Сообщение от как подсчитать сколько раз встречалась каждая ошибка on 14-Сен-12, 10:33 
> cat *allfiles* | awk -F"|" '{print $39}' | sort | uniq -c
> | sort -n

Огромное спасибо! Ваш способ действительно на много проще!

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

12. "как подсчитать сколько раз встречалась каждая ошибка"  +/
Сообщение от Andrey Mitrofanov on 14-Сен-12, 19:20 
> cat *allfiles* | awk -F"|" '{print $39}' | sort | uniq -c
> | sort -n

Никогда несколько сот мегабайт ч-з |sort|uniq -c не пропускал? Попробуй.

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

13. "как подсчитать сколько раз встречалась каждая ошибка"  +/
Сообщение от Аноним (??) on 15-Сен-12, 00:25 
>> cat *allfiles* | awk -F"|" '{print $39}' | sort | uniq -c
>> | sort -n
> Никогда несколько сот мегабайт ч-з |sort|uniq -c не пропускал? Попробуй.

Да оно даже раньше умрёт - на cat *allfiles* - там если не забыли 52000 штук заматчится :)

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "как подсчитать сколько раз встречалась каждая ошибка"  +/
Сообщение от Pahanivo (ok) on 17-Сен-12, 08:05 
> Да оно даже раньше умрёт - на cat *allfiles* - там если

да ше вы сразу перепугались - это костяк решения а не само решение
> не забыли 52000 штук заматчится :)

ноу проблем

find | xargs | cat | awk >> TMP_FILE
cat TMP_FILE | sort + uniq -c | sort

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

9. "как подсчитать сколько раз встречалась каждая ошибка"  +/
Сообщение от Andrey Mitrofanov on 14-Сен-12, 19:15 
>> Раз-раз?
> [[Чёй-та для зарегистрированных??! Совсем зажрались.]]
> [CUT: платный Контент.]

Два!
> есть около 52000 файлов, каждый приблизительно по 1 Мб.

ЖB) забудь про |sort |uniq -c .... Не, ну можно, конечно попробивать. С 1 файлом, с 10, ... если утерпишь до конца, то пока пробуешь со 100, прикинуть, сколько будут пыхтеть 52K. Потом - Ctrl-C.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

10. "как подсчитать сколько раз встречалась каждая ошибка"  +/
Сообщение от Andrey Mitrofanov on 14-Сен-12, 19:17 
>> Раз-раз?
> [[Чёй-та для зарегистрированных??! Совсем зажрались.]]
> [CUT: платный Контент.]

Три.

> #!/bin/sh
> d=/home/taskmng/bill/charge/abnormal
> arr=(`ls $d|tr '\n' ' '`)

Этот tr--^ совсем не_ нужен. Я сказал.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

11. "как подсчитать сколько раз встречалась каждая ошибка"  +/
Сообщение от Andrey Mitrofanov on 14-Сен-12, 19:19 
>> Раз-раз?
> [[Чёй-та для зарегистрированных??! Совсем зажрались.]]
> [CUT: платный Контент.]

Три с кисточкой. Уф...

> for (( i=0;i<${#arr[*]};i++ ))
> if [ -e $d/${arr[$i]} ]
> awk -F"|" '{print $39}' $d/${arr[$i]} | sort -u >> tmp
> cat tmp | sort -u

ls $d |xargs cat |awk -F"|" '{a[$39]++}END{for(e in a)printf"█ %s\n",a[e],e}' |sort -nr

█ --> % 8 d  ///А у Вас квотинг и эскейпинг кривой!  :-P

На здоровье! (Нет, не проверял. Сам -- если что не.)

> Задача:
> как подсчитать сколько раз во всех файлах (52000) встречалась каждая ошибка?
> буду благодарен хотя бы за алгоритм.

Не студент? ТОчно не студент??

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

15. "как подсчитать сколько раз встречалась каждая ошибка"  +/
Сообщение от Andrey (??) on 29-Сен-12, 19:00 
> Не студент? ТОчно не студент??

52000 файлов? Лаборант. ;)

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру