Используйте nethogs -t
для захвата использования каждого процесса и разбора вывода.
Из https://boopathi.in/blog/capturing-per-process-bandwidth-usage-using-nethogs/
sh -ic "{ /usr/sbin/nethogs -t eth1 &> output; \
kill 0; } | { sleep $TIMEOUT; \
kill 0; }" 3>&1 2>/dev/null
Поля вывода:
Process / Process id / User id sent kbps recv kbps
и разобрать вывод с помощью https://github.com/boopathi/nethogs-parser
Другое решение от SO: https://stackoverflow.com/a/20705080/3812704
Но мне больше нравится первое решение.
Сохраните вывод в 2 файла и используйте приведенную ниже команду для достижения результата, как указано
cat file1 file2|sed '/Month/d'| sed "s/:$//g"| sed '1i Month Day Time SystemMessage'
Month Day Time SystemMessage
Mar 30 02:50:56 SHUTDOWN_TIME
Mar 30 13:13:28 SHUTDOWN_TIME
Apr 1 17:27:48 SHUTDOWN_TIME
Apr 1 23:59:37 SHUTDOWN_TIME
Apr 10 17:08:10 SHUTDOWN_TIME
Apr 10 22:59:13 SHUTDOWN_TIME
Apr 11 19:13:43 SHUTDOWN_TIME
Apr 2 16:33:50 SHUTDOWN_TIME
Apr 3 00:13:58 SHUTDOWN_TIME
Apr 3 16:54:22 SHUTDOWN_TIME
Apr 3 23:36:55 SHUTDOWN_TIME
Apr 4 17:00:40 SHUTDOWN_TIME
Apr 5 17:00:50 SHUTDOWN_TIME
Apr 8 17:41:18 SHUTDOWN_TIME
Apr 8 23:41:05 SHUTDOWN_TIME
Apr 9 17:19:33 SHUTDOWN_TIME
Apr 9 23:23:18 SHUTDOWN_TIME
Mar 30 12:37:12 BOOT_TIME
Apr 1 10:09:12 BOOT_TIME
Apr 1 21:45:41 BOOT_TIME
Apr 10 09:38:12 BOOT_TIME
Apr 10 19:53:06 BOOT_TIME
Apr 11 12:02:02 BOOT_TIME
Apr 12 09:33:21 BOOT_TIME
Apr 2 10:19:19 BOOT_TIME
Apr 2 22:54:34 BOOT_TIME
Apr 3 09:56:02 BOOT_TIME
Apr 3 21:09:25 BOOT_TIME
Apr 4 10:00:42 BOOT_TIME
Apr 5 10:09:17 BOOT_TIME
Apr 8 09:47:02 BOOT_TIME
Apr 8 21:21:34 BOOT_TIME
Apr 9 09:34:50 BOOT_TIME
Apr 9 21:16:49 BOOT_TIME
Вы, вероятно, сделали бы что-то вроде следующего, чтобы объединить их (непроверенными, поскольку у меня нет доступа к журналам в системе macOS High Sierra, а сообщения журнала вообще не совпадают в моей системе Mojave):
cat /private/var/log/system.log | awk '
BEGIN { OFS="\t"; print "Month", "Day", "Time", "Message" }
/SHUTDOWN_TIME/ { sub(":$","",$8); print $1, $2, $3, $8 }
/BOOT_TIME/ { print $1, $2, $3, $6 }'
sub()
удаляет завершающий :
в 8-м поле, если он там есть.
Обратите внимание, что я печатаю заголовок только один раз, тогда как вы печатаете его один раз для каждой строки. Сортировка также будет ненужной, так как лог-файлы предположительно уже отсортированы по времени.
В моей системе macOS Mojave другие файлы system.log*
сжаты, что означает, что вы не можете использовать cat
для отправки их содержимого в awk
. Вы бы использовали zcat
на них. Как пользователь-администратор в системе, мне также не нужно использовать sudo
для чтения журналов.