2014-12-08 5 views
0

두 번째 라인이 "Minion did 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 

나는 첫 번째 줄에 "t-dat- *"를 얻으려면 몇 가지 처리를 수행 할 '미니언은 반환하지 않았습니다'. 두 번째 줄에 인쇄 된 출력을 기준으로 첫 줄을 구분하는 방법은 무엇입니까? 현재 행은 패턴과 일치하는 경우

+0

당신은 지금까지 코드가 있습니까? – CorbinMc

답변

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 
+0

감사합니다 paxdiablo! 그것은 매력처럼 작용했습니다. 나는 'sed'와 'awk'를 배우기를 원하지만 링크의 대부분은 더 혼란 스럽다. 이 책을 참조해야하는 책이나 링크에 대해 통찰력을 줄 수 있습니까? –

+0

@ user2964886,'sed'와'awk'을 배우기 위해서, 내가 그 이름을 기억할 수만 있다면 나는 아주 좋아하는 책이있다. ... 그게 바로 "sed & awk"입니다 :-) http://shop.oreilly.com/product/9781565922259.do. 데드 트리 에디션을 위해 열심히 번창하지 않으려면 http://www.gnu.org/software/gawk/manual/gawk.html을보십시오. – paxdiablo