패턴 일치 후 n번째 열을 호출하는 방법은 무엇입니까?

패턴 일치 후 n번째 열을 호출하는 방법은 무엇입니까?

데이터 파일 file1.txt가 있고 패턴("최적 맞춤점:" 또는 "최적 맞춤")을 일치시킨 다음 해당 행의 마지막 열을 인쇄하려고 합니다.

파일 1.txt

best-fit point:  0.0000  0.0000  0.0000   x coordinate   0.0000
best-fit point: -0.4330 -0.2500  0.0884   x coordinate   0.5078
best-fit point:  0.8660  0.5000 -0.1768   x coordinate   2.0310
best-fit point: -0.4330  0.2500  0.1768   x coordinate   3.4003
best-fit point:  0.8660  1.0000 -0.0884   x coordinate   4.9236
best-fit point:  0.4330  0.7500  0.0000   x coordinate   5.4313
best-fit point:  0.8660 -0.5000 -0.3536   x coordinate   6.8006
best-fit point:  0.0000  0.0000  0.2652   x coordinate   7.9766
best-fit point:  1.2990  0.7500  0.0000   x coordinate   9.4998
best-fit point:  0.8660  0.5000  0.0884   x coordinate  10.0076
best-fit point:  1.2990 -0.7500 -0.2652   x coordinate  11.3769
best-fit point:  0.8660 -1.0000 -0.1768   x coordinate  11.8846
best-fit point:  0.0000  0.0000 -0.5303   x coordinate  13.2539

산출

 0.0000
 0.5078
 2.0310
 3.4003
 4.9236
 5.4313
 6.8006
 7.9766
 9.4998
10.0076
11.3769
11.8846
13.2539

내 솔루션과 문제

awk '/best-fit point:/{i==0 ; i++; print "K"i"="$8}' file-1.txt

열에 음수 데이터가 없으면 awk 명령이 성공적으로 실행됩니다. 패턴 일치 후 마지막 열을 인쇄하는 다른 방법이 있습니까?

미리 감사드립니다!

답변1

입력한 마지막 열이 항상 이전 열과 별개인 경우 필드 번호를 참조하여 마지막 열을 출력하도록 AWK에 요청할 수 있습니다.

awk '/best-fit point:/ { printf "%7.4f\n", $NF }'

귀하의 질문에 표시된 출력이 생성됩니다.

그러나 입력 내용이 고정 너비 열을 사용하는 것 같습니다. GNU AWK를 사용하는 경우 FIELDWIDTHS다음을 사용하여 열을 지정할 수 있습니다.

awk -vFIELDWIDTHS="21 7 7 7 16 8" '/best-fit point:/ { printf "%7.4f\n", $6 }'

답변2

그리고 grep:

grep 'best-fit' file.txt | grep -Eo ' .[^ ]*$'

"가장 적합한" 줄만 선택하고 "[공백] 문자열 [줄 끝]"으로 줄입니다.

형식이 입력 형식과 동일하게 고정된 경우 문자 범위를 잘라낼 수도 있습니다.

grep 'best-fit' file.txt | cut -c60-

관련 정보