파일에는 숫자가 포함되지 않은 줄이 두 번 나타나는 줄 패턴이 있습니다.
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
다음에 중지하는 모든 문자와 일치합니다 ( )