![패턴 일치 후 n번째 열을 호출하는 방법은 무엇입니까?](https://linux55.com/image/186626/%ED%8C%A8%ED%84%B4%20%EC%9D%BC%EC%B9%98%20%ED%9B%84%20n%EB%B2%88%EC%A7%B8%20%EC%97%B4%EC%9D%84%20%ED%98%B8%EC%B6%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
데이터 파일 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-