tac file | sed '/xyz/,/a/!d' | tac
(если у вас нет -так
, ваша команда -хвост
может иметь команду -r
, чтобы сделать то же самое).
Несколько моментов, которые следует учитывать в следующем скрипте gawk
:
Видно, что введенная вами дата не показывает век , вам необходимо учитывать этот формат в отношении того, что дата
используется по умолчанию.
Предоставленный пример вывода показывает десятичное время, но в вашем описании указаны секунды. Данные указаны в секундах, поэтому этот скрипт выводит целочисленные секунды
gawk 'function d2s( date ){ c="date -d\""date"\" +%s"; c|getline b; close(c); return gensub("\n","","",b) }
BEGIN{ RS="\n *\n" }
{
nf=split($0,f,"\n"); delete o
for(fi=1;fi<=nf;fi++){
split(f[fi],s," ")
if( s[1]=="TIME:" ) o[1]=s[2]" "s[3]
if( s[1]=="FROM:" ) o[2]=s[2]
if( s[1]=="NEXT_HOP:" ) o[3]=s[2]
if( s[1]=="ORIGIN:" ) o[4]=s[2]
}
if( o[1] ){
if( fps ) tds=d2s(o[1])-fps
else { tds=0; fps=d2s(o[1]) }
printf( "%s %s %s %s\n", tds, o[2], o[3], o[4] )
}
}' "$f"
с временем ввода, отличным от опубликованного (все они были одинаковыми):
0 96.4.0.55 96.4.0.55 IGP
1 213.140.32.148 213.140.32.148 IGP
3 207.45.223.244 207.45.223.244 IGP
7 195.219.96.239 195.219.96.239 IGP
15 129.250.0.11 129.250.0.11 IGP