Используйте это:
awk -v alt="$ALTER" -v name="$NAME" '
$2 ~ /-/ && $2 >= alt && $3 ~ name{print $1}' file
$2 ~ /-/
: проверяет, что число дней включено. $2 >= alt
: проверяет, что количество дней в etime
больше, чем $ALTER
. $3 ~ name
: ищет значение name
($NAME
) в 3-м поле. Другое чистое bash
решение:
ps -eo pid,etime,comm | while read p e n; do
if [[ $n =~ $NAME ]] && [[ $e =~ \- ]] && [ "${e%%-*}" -gt "$ALTER" ]; then
echo $p
fi
done
while read p e n
сохраняет pid, etime и имя команды в переменных $p
, $e
и $n
.
[[ $n =~ $NAME ]]
: проверяет, есть ли в команде $NAME
[[ $e =~ \- ]]
: проверяет, есть ли в etime тире (-) (означает, что процесс длится больше суток)[ "${e%%-*}" -ge "$ALTER" ]
: проверяет, больше или равен ли счетчик дней в etime значению в $ALTER
echo $p
Esta no es la respuesta deseada, pero dependiendo de qué tan bueno sea con las expresiones regulares, no debe descuidar la lectura del archivo completo y hacer una búsqueda y sustitución de patrones. Supongo que C ++ proporciona una biblioteca de expresiones regulares adecuada.
Una ventaja es que puede desarrollar y probar la expresión regular fuera de su aplicación, por ejemplo, en este sitio web de prueba de expresiones regulares donde he puesto un archivo simple, un patrón y una sustitución con los que puede jugar.
Por supuesto, una expresión regular puede ser más difícil de leer que el código C++ que ya tiene, pero es un lenguaje muy poderoso y se puede hacer más legible usando una versión que permita comentarios en línea o construyéndola. de varias partes de la cuerda.