如果第二行匹配“Minion没有返回”,我需要处理第一行。我的文字如下:
t-dat-collectorsrv-1a.2014_12_01_11_23:
True
t-dat-postprocessorsrv-1a.2014_04_29_10_02:
True
t-dat-collectorsrv-1a.2014_12_03_10_15:
Minion did not return
t-dat-collectorsrv-1a.2014_12_03_10_27:
Minion did not return
t-dat-collectorsrv-1a.2014_12_03_10_38:
Minion did not return
每当我得到'Minion没有回来'我想得到第一行“t-dat- *”并想要做一些处理。如何根据第二行打印的输出分隔第一行?
答案 0 :(得分:0)
如果当前行与模式匹配,您可以使用awk
存储上一行并对其进行操作:
$ awk '/Minion did not return/{print prev;prev=$0}{prev=$0}' inputFileName
t-dat-collectorsrv-1a.2014_12_03_10_15:
t-dat-collectorsrv-1a.2014_12_03_10_27:
t-dat-collectorsrv-1a.2014_12_03_10_38:
在上面的成绩单中,它只是打印出上一行,但你也可以用它做更复杂的事情:
$ awk '
/Minion did not return/ {
print gensub(/^[^.]*\.(....).(..).(..).(..).(..).*$/,
"\\1-\\2-\\3 \\4:\\5", "g", prev);
prev=$0
}
{
prev=$0
}' qq.in
2014-12-03 10:15
2014-12-03 10:27
2014-12-03 10:38