URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9540
[ Назад ]

Исходное сообщение
"как подсчитать сколько раз встречалась каждая ошибка"

Отправлено как подсчитать сколько раз встречалась каждая ошибка , 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) встречалась каждая ошибка?
буду благодарен хотя бы за алгоритм.


Содержание

Сообщения в этом обсуждении
"как подсчитать сколько раз встречалась каждая ошибка"
Отправлено как подсчитать сколько раз встречалась каждая ошибка , 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

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


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


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

Раз-раз?


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

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

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

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

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


"как подсчитать сколько раз встречалась каждая ошибка"
Отправлено как подсчитать сколько раз встречалась каждая ошибка , 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


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

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

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

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

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


"как подсчитать сколько раз встречалась каждая ошибка"
Отправлено Pahanivo , 14-Сен-12 09:03 
cat *allfiles* | awk -F"|" '{print $39}' | sort | uniq -c | sort -n

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

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


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

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


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

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


"как подсчитать сколько раз встречалась каждая ошибка"
Отправлено Pahanivo , 17-Сен-12 08:05 
> Да оно даже раньше умрёт - на cat *allfiles* - там если

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

ноу проблем

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


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

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

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


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

Три.

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

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


"как подсчитать сколько раз встречалась каждая ошибка"
Отправлено Andrey Mitrofanov , 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) встречалась каждая ошибка?
> буду благодарен хотя бы за алгоритм.

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


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

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