Как распечатать возрастающее количество случаев уникальных значений в столбце 1

Короткий ответ: Вы не можете.

Длинный ответ: Wireshark работает над уровнями 1-6 (лучше всего на уровнях 1-3). Это http-content-information находится на уровне 7.

Таким образом, если Ваш хотеть к вошедшему глубину здесь это - то, что Вы могли сделать (вдоль этих строк):

Постоянно наблюдайте tcp/http-traffic с tpcdump для пакетов, меньших, чем 900 байтов (типичная длина первоначального запроса HTTP). Если Вы встречаетесь с "интересными" URL, инициировали полный дамп рассматриваемого соединения.

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

Любым путем Вам нужен второй процесс, который фильтрует/инициирует на tcpdump-выводе.

Альтернатива могла быть должной к сценарию wireshark- gui или использование это для получения рассматриваемых пакетов.

7
05.03.2015, 01:10
2 ответа

Стандартный трюк для такого рода задача в awk - это использовать ассоциативный счетчик счетчиков:

awk '{ print $0 "\t" ++count[$1] }'

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

Apple_1   1      300
Apple_2   1      500
Apple_1   500    1500

будет производить

Apple_1   1      300     1
Apple_2   1      500     1
Apple_1   500    1500    2

(счетчик для Apple_1 не сбрасывается, когда мы видим Apple_2 ), но если вход сортируется, вы будете в порядке.

В противном случае вам нужно отслеживать счетчик и последний ключ:

awk '{ if (word == $1) { counter++ } else { counter = 1; word = $1 }; print $0 "\t" counter }'
7
27.01.2020, 20:17

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


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

cut -f1 file.txt | sort | uniq -c

(обратите внимание, что разрез зависит от разделителей табуляции, не просто пробелы.)


На самом деле, поскольку ваш файл уже отсортирован по первому полю, вам не нужно сортировать его:

cut -f1 file.txt | uniq -c

И если вы хотите включить их в исходный файл как новый, четвертый столбец, вы можете использовать join :

cut -f1 file.txt | uniq -c | join -2 2 file.txt -

( join зависит от отсортированного ввода.)

Вывод предоставленных входных данных:

Apple_1 1 300 1
Apple_2 1 500 3
Apple_2 500 1500 3
Apple_2 1500 2450 3
Apple_3 1 1250 2
Apple_3 1250 2000 2

Обратите внимание, что join считывает разделители пробелов интуитивно понятным образом, будь то табуляция или пробелы, но выводит ровно один пробел в качестве разделителя. Если вы хотите вернуть свои вкладки, перенаправьте их на tr '' '\ t'

1
27.01.2020, 20:17

Теги

Похожие вопросы