awk использует в отчете разницу во времени в миллисекундах

Верно, exitвлияет на фоновый процесс, обеспечивая нулевой статус выхода. Я бы не стал называть это "убийством", так как процесс и так был на грани остановки.

Запустите команду wpa в фоновом режиме и отслеживайте ее PID, чтобы вам не приходилось использоватьkillall:

bash -c 'echo $$ > /tmp/pid; exec wpa_supplicant 2>&1 > /tmp/out' &
sleep 1
egrep 'pre-shared key may be incorrect' /tmp/out && kill `cat /tmp/pid`

Я знаю, что ваша команда wpa немного длиннее, я сократил ее, чтобы привлечь внимание к важным частям.

2
09.09.2020, 11:04
2 ответа

Вот как выполнить расчет, который вы просили об использовании GNU awk дляmktime():

$ cat tst.awk
$3 == "Aggregated" {
    aggDt = $1 " " $2
}

$3 == "Flushed" {
    fluDt = $1 " " $2
    aggMs = dt2ms(aggDt)
    fluMs = dt2ms(fluDt)
    difMs = fluMs - aggMs
    print fluDt, aggDt, difMs
}

function dt2ms(dt,      t, ms) {
    split(dt,t,"[/ :.]")
    ms = mktime(t[3]" "t[1]" "t[2]" "t[4]" "t[5]" "t[6]) * 1000 + t[7]
    return ms
}

.

$ awk -f tst.awk file
09/03/2020 00:05:03.582 09/03/2020 00:05:03.364 218
09/03/2020 00:20:03.860 09/03/2020 00:20:03.598 262

Я уверен, что вы можете понять, как преобразовать ms в нужный формат мин/сек/мс и добавить любую другую информацию, которая вам нужна, в любом формате, который вам нужен, как в вашем существующем скрипте.

4
18.03.2021, 23:06

Просто посчитайте. Разделите временную метку на каждой строке и рассчитайте секунды с полуночи (, включая миллисекунды ).

function getSecs (Ts, Local, V) {

    split (Ts, V, /:/);
    return (3600 * V[1] + 60 * V[2] + V[3]);
}

Назовите это для каждой строки, например

Secs[NR] = getSecs( $2);

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

GNU/awk делает работу с датами очень хорошо, с небольшой доработкой. Если вы преобразуете свои данные в строку, например YYYY MM DD HH MM SS [DST], и передадите ее в mktime(), вы получите секунды с начала эпохи. Вы можете настроить любое из полей (, например, добавить 19 к значению месяца и убрать 73 дня из ), и это будет скорректировано внутри. Вы можете вывести любой формат с помощью strftime(). (Вам нужно добавить миллисекунды обратно отдельно.)

2
18.03.2021, 23:06

Теги

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