awk 또는 sed를 사용하여 패턴 발생(원격 중복 행)에서 선택적으로 추출

awk 또는 sed를 사용하여 패턴 발생(원격 중복 행)에서 선택적으로 추출

파일에는 숫자가 포함되지 않은 줄이 두 번 나타나는 줄 패턴이 있습니다.

Energy initial, next-to-last, final = 
 -87057.8200168321  -87208.7223900015  -87208.7197287879
Energy initial, next-to-last, final = 
 -87208.7197287879  -87208.7223900015  -87310.7197287879

-87310.7197287879숫자가 포함되지 않은 줄이 두 번째로 나타난 후 줄 끝에 있는 값을 추출하고 싶습니다 .

awk나 Sed를 사용하여 이 작업을 어떻게 수행할 수 있나요?

답변1

awk '/^Energy initial, next-to-last, final =/ 
    { if (secondline==0) { secondline=1; next; } else { getline; print $3; } }' inputfile

-87310.7197287879

답변2

파일에 이 패턴이 하나 이상 있는 경우 다른 접근 방식은 다음과 같습니다.

$ awk '/^Energy initial, next-to-last, final =/ {a[NR]=1} 
       {if(NR >= 3 && a[NR-2] == a[NR] && a[NR] == 1) {toprint=1; next}}
       {if (toprint) {print $3; toprint=0}}' infile

그럼에도 불구하고 Hauke의 솔루션은 훨씬 덜 추악합니다.

답변3

잠깐만요:

> awk '{print $3}' /tmp/test.txt | grep -m1 -vE '[a-z]'
-87208.7197287879

awk명령은 세 번째 항목( $3) 을 인쇄 /tmp/test.txt하고 grep다음을 수행합니다.아니요[a-z]텍스트가 있는 줄을 삭제하고( ) 선택한 줄 1개 -m1다음에 중지하는 모든 문자와 일치합니다 ( )

관련 정보