Объединение двух выходных данных с помощью AWK

Используйте 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

Но мне больше нравится первое решение.

1
12.04.2019, 15:46
2 ответа

Сохраните вывод в 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
-1
27.01.2020, 23:41

Вы, вероятно, сделали бы что-то вроде следующего, чтобы объединить их (непроверенными, поскольку у меня нет доступа к журналам в системе 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для чтения журналов.

2
27.01.2020, 23:41

Теги

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