2015-06-18 3 views
-1

У меня есть журнал, как показано нижеподсчитывать значения, основанные на состоянии в журнале

11 13/06/2015:00:02:37 
10 13/06/2015:00:02:38 
    7 13/06/2015:00:02:39 
10 13/06/2015:00:02:40 
    1 13/06/2015:00:02:42 
    1 13/06/2015:00:02:50 
    1 13/06/2015:00:02:54 
    2 13/06/2015:23:41:46 
    1 13/06/2015:23:41:47 
    2 13/06/2015:23:41:48 
    1 13/06/2015:23:41:49 
    2 13/06/2015:23:41:50 
    1 13/06/2015:23:41:51 
    2 13/06/2015:23:41:52 
    1 13/06/2015:23:41:53 
    2 13/06/2015:23:41:54 
    1 13/06/2015:23:41:55 
    1 13/06/2015:23:59:50 
    2 13/06/2015:23:59:51 
    2 13/06/2015:23:59:52 
    2 13/06/2015:23:59:53 
    2 13/06/2015:23:59:54 
    2 13/06/2015:23:59:55 
    1 13/06/2015:23:59:56 
    2 13/06/2015:23:59:57 
    2 13/06/2015:23:59:58 
    2 13/06/2015:23:59:59 

Я хочу считать (1-е поле) значения на основе минут, как в выше мы видим, отсчеты в ИКС экс : 2 счета @ 13/06/2015: 23: 59: 53 раз. Я хочу их суммировать, чтобы показать минутку. пожалуйста, помогите мне, как закодировать в shell/linux.

Спасибо,

+0

Это звучит очень сложным, когда сделано в оболочке скрипт. –

+0

Но это звучит управляемо, если вы, например, используете python для этого. Поскольку это правильная задача программирования, вам следует подумать о том, чтобы использовать подходящий инструмент программирования - почти на каждой машине там есть хотя бы один используемый язык скриптинга, и в большинстве случаев вы можете полагаться на языки perl, python и, возможно, на другие языки доступный. –

ответ

0

попробовать это:

cat path_to_your_log_file|awk '{split($2,res,":");var=res[1]":"res[2]":"res[3];counter[var]+=$1}END{for(i in counter){print counter[i],i}}' 
+0

Пожалуйста, объясните свой ответ. – Dropout

+0

@Dropout, Игнорировать последнее поле 'second', которое может разбиваться на«: »и использовать' dd/mm/yyyy: hh: mm' в качестве ключа для подсчета. – Will

+0

Wow - Это хорошо, – Ravikanth

0

Вы можете использовать этот подход, используя скрипт и немного СЭД:

t= 
sum= 
f=$(mktemp) 
sed -r 's/^ *(.*):[0-9]{2}$/\1/' txt > $f 
while read line; do 
    c=$(echo "$line"|cut -d' ' -f1) 
    currt=$(echo "$line"|cut -d' ' -f2-) 
    if [ -n "$t" ] && [ "$t" != "$currt" ]; then 
    echo "$sum $t" 
    t=$currt 
    sum=$c 
    elif [ -z "$t" ]; then 
    t=$currt 
    sum=$c 
    else 
    sum=$(($sum+$c)) 
    fi 
done < $f 
rm -f $f 
if [ -n "$t" ] && [ "$t" = "$currt" ]; then 
    echo "$sum $t" 
fi 
Смежные вопросы