awk 또는 grep? - 키워드 및 후속 열 인쇄

awk 또는 grep? - 키워드 및 후속 열 인쇄

벤치마킹을 했는데 출력은 다음 형식의 여러 결과를 포함하는 단일 파일입니다.

[blaaa]
1st run

T/V   N  NB  P  Q   Time
==========================
2     3   4  1  2   1.02
[blaaaa...]
2nd run
T/V   N  NB  P  Q   Time
==========================
4     42 4  1  2    1.22

나는 단지 내가 한 다양한 실행의 실행 시간을 얻고 싶습니다. 그렇다면 "Time"을 grep하고 다음 열을 인쇄하는 것이 가능합니까? 아니면 그냥 인쇄해서 써도 돼요

1.02
1.22

위의 예에서는? 나는 blaa 부분이 아닌 세 개의 결과 열만 인쇄하는 것을 선호합니다 :D

답변1

Time항상 여섯 번째 필드에 있다고 가정합니다 .

$ awk '$6 == "Time" {t = NR} t && NR == t+2 {print $6}' file
1.02
1.22

getline또는 - fast'n'dirty를 두 번 사용할 수 있습니다 .

awk '$6 == "Time" {getline; getline; print $6}' file

getline( 반환 값을 확인하지 않기 때문에 "더티"입니다 ).

답변2

$ grep -o 'Time\|[0-9\.]\+$' file
Time
1.02
Time
1.22
$ grep -o '[0-9\.]\+$' file
1.02
1.22
$ grep -A2 ^T/V file
T/V   N  NB  P  Q   Time
==========================
2     3   4  1  2   1.02
--
T/V   N  NB  P  Q   Time
==========================
4     42 4  1  2    1.22

결과는 마지막 grep에서 구분되며 다음 --을 사용하여 제거할 수 있습니다.

$ grep -A2 ^T/V file | grep -v '^--'

다음 줄을 제거한 후 ====:

$ grep -A2 ^T/V file | grep -v '^--\|=\+'

답변3

을 사용하여 두 가지 답변을 얻었습니다 . awk and grep다음을 시도해 볼 수도 있습니다 sed.

sed -E '/===*/{N;s/.*([0-9]+\.[0-9]*)/\1/g};t;d' file_name

여기서는 /===*/일치 ===..하고 다음 줄로 이동하여 그 사이에 소수가 있는 부동 소수점을 찾고 다른 모든 줄을 건너뛰고 삭제합니다.

다음 출력이 인쇄됩니다.

1.02
1.22

관련 정보