Верно, 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 немного длиннее, я сократил ее, чтобы привлечь внимание к важным частям.
Вот как выполнить расчет, который вы просили об использовании 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 в нужный формат мин/сек/мс и добавить любую другую информацию, которая вам нужна, в любом формате, который вам нужен, как в вашем существующем скрипте.
Просто посчитайте. Разделите временную метку на каждой строке и рассчитайте секунды с полуночи (, включая миллисекунды ).
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()
. (Вам нужно добавить миллисекунды обратно отдельно.)