Есть ли способ проанализировать интервалы пакетов, чтобы вывести количество пакетов в секунду? - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть около 54 000 пакетов для анализа, и я пытаюсь определить среднее количество пакетов в секунду (а также минимальное и максимальное количество пакетов в течение данной секунды)

Мой входной файл являетсяодин столбец времени пакета (см. пример ниже):

0.004

0.015

0.030

0.050

..

..

1999.99

Я использовал awk для определения дельты времени, но не могу найти способ разобрать куски времени, чтобы получить выводиз:

0-1s = 10 packets

1-2s = 15 packets 

и т. д.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Не могли бы вы попробовать следующее:

С bash:

max=0
while read -r line; do
    i=${line%.*}                    # extract the integer part
    a[$i]=$(( ${a[$i]} + 1 ))       # increment the array element
    (( i > max )) && max=$i         # update the maximum index
done < sample.txt

# report the summary
for (( i=0; i<=max; i++ )); do
    printf "%d-%ds = %d packets\n" "$i" $(( i+1 )) "${a[$i]}"
done

С AWK:

awk '
    {
        i = int($0)
        a[i]++
        if (i > max) max = i
    }
    END {
        for (i=0; i<=max; i++)
            printf("%d-%ds = %d packets\n", i, i+1, a[i])
    }' sample.txt

sample.txt:

0.185
0.274
0.802
1.204
1.375
1.636
1.700
1.774
1.963
2.044
2.112
2.236
2.273
2.642
2.882
3.000
3.141
5.023
5.082

Вывод:

0-1s = 3 packets
1-2s = 6 packets
2-3s = 6 packets
3-4s = 2 packets
4-5s = 0 packets
5-6s = 2 packets

Надеюсь, это поможет.

0 голосов
/ 26 сентября 2019

Вот пример того, как вы можете использовать awk для получения желаемого результата.Предположим, что ваш исходный входной файл - sample.txt. Сначала нужно выполнить его обратную сортировку (sort -nr), а затем вы можете предоставить awk для вновь отсортированного файла вместе с переменной времени через аргумент awk "-v".Выполните свои тесты внутри awk, используйте «next» для пропуска строк и «exit» для выхода из скрипта awk, когда это необходимо.

    #!/bin/bash
    #
    for i in 0 1 2 3
    do
        sort -nr sample.txt |awk -v time=$i 'BEGIN{number=0}''{
                                if($1>=(time+1)){next}
                                else if( $1>=time && $1 <(time+1))
                                        {number+=1}
                                else{
                                printf "[ %d - %d [ : %d records\n",time,time+1,number;exit}
                        }'
    done

Вот пример файла:

0.1
0.2
0.8
.
.
0.94
.
.
1.5
1.9
.
3.0
3.6

Вот вывод программы:

[ 1 - 2 [ : 5 records 
[ 2 - 3 [ : 8 records 
[ 3 - 4 [ : 2 records

Надеюсь, это поможет!

...