문자열 값이 0보다 큰 경우 Grep 라인 전후

문자열 값이 0보다 큰 경우 Grep 라인 전후

안녕하세요. 다음 정보가 포함된 텍스트 파일이 있습니다.

#[Tue Oct 25 00:00:02 2016] --- START OUTPUT
#CMD: XXX
END-->0<--
#[Tue Oct 25 00:00:57 2016] --- END
#RETURN: 1
#ELAPSED TIME (in seconds): 55

#[Tue Oct 25 00:05:01 2016] --- START OUTPUT
#CMD: XXX
END-->0<--
#[Tue Oct 25 00:05:33 2016] --- END
#RETURN: 0
#ELAPSED TIME (in seconds): 32

해당 Return이 0인 경우 라인과 라인을 --End가져 Return오고 싶습니다 . Elapsed>

지금까지 나는 Return 라인을 grep할 수 있었습니다.grep "#RETURN:" -A 1 -B 1 f.log

하지만 Return이 >0인 경우에만 grep을 수행하는 방법은 무엇입니까?

원하는 출력:

#[Tue Oct 25 00:00:57 2016] --- END
#RETURN: 1
#ELAPSED TIME (in seconds): 55

답변1

와 함께 awk:

awk '/END$/ {prev=$0; next}; /^#RETURN/ && $2>0 {cur=$0; pr=1; next};\
                      pr {printf "%s\n%s\n%s\n", prev, cur, $0; pr=0}' file.txt
  • /END$/ {prev=$0; next}: 줄이 로 끝나면 END변수로 저장 prev하고 다음 줄로 이동합니다. 이것은 이전의 줄입니다RETURN

  • /^#RETURN/ && $2>0 {cur=$0; pr=1; next}: 줄이 로 시작 #RETURN하고 두 번째 필드가 0보다 큰 경우 줄을 로 저장하고 cur변수를 pr1(true)로 설정한 후 다음 줄로 이동합니다.

  • pr {printf "%s\n%s\n%s\n", prev, cur, $0; pr=0}: prtrue이면 원하는 형식으로 출력을 인쇄하고 마지막으로 pr0(false)으로 설정합니다.

예:

% cat file.txt                                                                                                                   
#[Tue Oct 25 00:00:02 2016] --- START OUTPUT
#CMD: XXX
END-->0<--
#[Tue Oct 25 00:00:57 2016] --- END
#RETURN: 1
#ELAPSED TIME (in seconds): 55

#[Tue Oct 25 00:05:01 2016] --- START OUTPUT
#CMD: XXX
END-->0<--
#[Tue Oct 25 00:05:33 2016] --- END
#RETURN: 0
#ELAPSED TIME (in seconds): 32

% awk '/END$/ {prev=$0; next}; /^#RETURN/ && $2>0 {cur=$0; pr=1; next}; pr {printf "%s\n%s\n%s\n", prev, cur, $0; pr=0}' file.txt
#[Tue Oct 25 00:00:57 2016] --- END
#RETURN: 1
#ELAPSED TIME (in seconds): 55

답변2

이것을 시도해 볼 수 있습니다.

awk -F: '/#RETURN:/ && $2 > 0 { getline; print $0}' test

예;

user@host:/tmp$ awk -F: '/#RETURN:/ && $2 > 0 { getline; print $0}' test
#ELAPSED TIME (in seconds): 55

답변3

다음에서 정규식을 사용해야 합니다 grep.

 grep -C1 'RETURN: [1-9][0-9]*' input.txt

해당 정규식은 단일 0이 아닌(또는 0으로 시작하지 않는) 모든 (양수) 숫자를 포착해야 합니다.

관련 정보