awk 명령이 "종료되지 않은 문자열" 오류를 발생시킵니다.

awk 명령이 "종료되지 않은 문자열" 오류를 발생시킵니다.

awk 명령을 사용하여 줄을 삽입하면 종료되지 않은 문자열 오류가 발생합니다.

입력 파일은 다음과 같습니다

date      mean       rms       bias                                       
.....    .....       ....      .......                                         
.....       .....        ........           .........                         
......        ........  .......           .......

여기에 날짜, 평균, rms 및 편차에 대한 새 값을 삽입해야 합니다.

내 스크립트는 다음과 같습니다

echo $PDY $mean $rms  $bias                                      
awk '/Date/ { print; print "'$PDY' \t'$mean' \t'$rms' \t'$bias'"; next }1' file.txt

터미널 로그는 다음과 같습니다

+ echo 20180131 76.196 578.177 903.000                        
20180131 76.196 578.177 903.000
+ awk '/Date/ { print; print "20180131 \t' '76.196 \t578.177 \t903.000"; next }1' file.txt                                                      
awk: /Date/ { print; print "20180131 \t
awk:                       ^ unterminated string

print; print "20180131 \tawk 명령 뒤에 " "(공백/공백)이 있습니다. 왜 나오는지 모르겠어

해결책을 알려주십시오.

답변1

문자열은 '두 번째 문자열로 시작하고 끝납니다 '.

awk '/Date/ { print; print "20180131 \t'

오류 메시지의 종료되지 않은 문자열은 입니다 "20180131 \t.

대신 "내부적으로 사용하고 이스케이프하세요."\"

awk "/Date/ { print; print \"20180131 \t' '76.196 \t578.177 \t903.000\"; next }1" file.txt

답변2

이 오류 메시지는 awk따옴표 사용 방식이 마음에 들지 않는다는 의미입니다. 귀하의 진술을 살펴보면서 awk먼저 인쇄 진술에서 작은따옴표를 자주 사용했다는 점을 지적하고 싶습니다. awk다음 작은따옴표는 \t전체 프로그램의 끝을 표시하는 것으로 해석되며 awk(키워드 다음에 작은따옴표로 시작함 ), 이 시점에서 인쇄 명령에는 닫는 큰따옴표(또는 사용자가 말할 수 awk있는 닫는 중괄호)가 없습니다 .awk

프로그램에 변수를 전달하는 더 쉬운 방법은 awk명령줄 인수를 사용하는 것입니다 -V. awk -V pdy="$PDY" -V mean="$mean", and then usepdy는 awk` 변수를 and나타냅니다 . as native이 접근 방식을 사용하면 대부분의 참조가 필요하지 않습니다.

관련 정보