如果第二行匹配“Minion did not return”,我需要处理第一行。我的文字如下:
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 did not return”时,我想获取第一行“t-dat-*”并想做一些处理。如何根据第二行打印的输出分隔第一行?
最佳答案
您可以使用 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
关于linux - shell脚本中的文本处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27352113/