Не уверен, что это то, что вам нужно, но время начала и прошедшее время можно найти с помощью команды ps
.
ps -o 'comm,stime,etime' 1134 #1134 is your pid
Конечно, применяются и другие параметры для ps, например, параметр -a
для отображения не только процессов пользователя
awk
:
awk 'p==$0{print " Address : NOT_FOUND"}{p=$0}1'
Довольно наивное решение.
p==$0
IF p == текущая строка not found
p=$0
SET p = текущая строка 1
:печать Обрабатывает последовательные повторяющиеся строки.
И, как заметил @san -fran в комментариях под вопросом, «Последний IP-адрес тоже может отсутствовать, верно?» – Упс. Должен был подумать об этом.
Так:
awk -v e='Address : NOT_FOUND' 'p==$0{print e}{p=$0}END{if($1 ~ "IP")print e}1'
e
= текст для ввода p==$0
IF p == текущая строка e
p=$0
SET p = текущая строка END
вывести e
, если текущая строка содержитIP
1
:печать Здесь ошибка -строка добавлена как переменная, поскольку мы используем ее дважды. (И обрезано для удобства чтения в этом посте ).
Это один из способов сделать это с помощью скользящего -окна в GNU sed:
parse.sed
# Handle last-line-error
$ { /IP/ s/$/\n Address : NOT_FOUND/; }
# Always keep 2 lines in pattern-space
N
# If the lines are identical
/^([^\n]*)\n\1$/ {
# Add error text
s/\n/\n Address : NOT_FOUND\n/
# Ensure we still only have 2 lines in pattern-space
P
s/[^\n]*\n//
}
# Print line 1 and delete it from pattern-space
P
D
Вот модифицированный текст теста -с тройной ошибкой -и последней -строкой -ошибка:
IP_Remote_Address
Address : 192.168.1.1
IP_Remote_Address
Address : 192.168.1.2
IP_Remote_Address
Address : 192.168.1.3
IP_Remote_Address
IP_Remote_Address
IP_Remote_Address
IP_Remote_Address
Address : 192.168.1.4
IP_Remote_Address
Address : 192.168.1.5
IP_Remote_Address
Address : 192.168.1.6
IP_Remote_Address
Address : 192.168.1.7
IP_Remote_Address
IP_Remote_Address
Address : 192.168.1.8
IP_Remote_Address
Запустите это так:
sed -Ef parse.sed infile
Или в виде одного -вкладыша:
<infile sed -E '${/IP/ s/$/\n Address : NOT_FOUND/};N;/^([^\n]*)\n\1$/{s/\n/\n Address : NOT_FOUND\n/;P;s/[^\n]*\n//};P;D'
Выход в обоих случаях:
IP_Remote_Address
Address : 192.168.1.1
IP_Remote_Address
Address : 192.168.1.2
IP_Remote_Address
Address : 192.168.1.3
IP_Remote_Address
Address : NOT_FOUND
IP_Remote_Address
Address : NOT_FOUND
IP_Remote_Address
Address : NOT_FOUND
IP_Remote_Address
Address : 192.168.1.4
IP_Remote_Address
Address : 192.168.1.5
IP_Remote_Address
Address : 192.168.1.6
IP_Remote_Address
Address : 192.168.1.7
IP_Remote_Address
Address : NOT_FOUND
IP_Remote_Address
Address : 192.168.1.8
IP_Remote_Address
Address : NOT_FOUND
Использование GNU-версии утилиты редактирования потоков sed в расширенном режиме регулярных выражений:
sed -Ee '
x;1d;G
${/\n\s*IP_/ba;}
/^(.*)\n\1$/{
g;:a;p;c\
Address : NOT_FOUND
b
}
$!s/\n.*//
' file