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 

다른 실행의 런타임 만 얻고 싶습니다. 그럼 “시간”을 grep하고 다음 열만 인쇄 할 수 있습니까? 아니면 위의 예에 대해

1.02 1.22 

만 인쇄 하시겠습니까? blaa 부분없이 세 개의 결과 열만 인쇄하는 것을 선호합니다. : D

Comments

  • 당신은 같은 열을 의미하지만 다음은 하나의 line ?

답변

Time는 항상 여섯 번째 필드에 있습니다.

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

또는 getline를 두 번 사용할 수 있습니다.-quick “n”dirty :

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

( “dirty”는 getline 반환 값을 확인하지 않기 때문입니다.)

댓글

  • 또는 항상 $NF 사용 ' 마지막
  • @Kusalananda 예 좋은 점

답변

$ 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 "^--\|=\+" 

답변

, sed를 시도 할 수도 있습니다.

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

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

다음과 같이 출력됩니다.

1.02 1.22 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다