shell脚本中的文本处理

时间:2014-12-08 05:45:43

标签: linux shell

如果第二行匹配“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- *”并想要做一些处理。如何根据第二行打印的输出分隔第一行?

1 个答案:

答案 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