벤치마킹을 했는데 출력은 다음 형식의 여러 결과를 포함하는 단일 파일입니다.
[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