awk: 0602-562 $() 필드가 잘못되었습니다. AIX의 ksh 스크립트에서

awk: 0602-562 $() 필드가 잘못되었습니다. AIX의 ksh 스크립트에서

여러 위치의 정보가 포함된 텍스트 파일이 있습니다. 파일의 각 새 섹션에는 제목이 있습니다. 하나의 제목에 모든 정보를 담고 제목을 없애고 별도의 파일로 옮기려고 합니다. 모든 부분은 헤더 정보를 기준으로 별도의 파일로 이동됩니다. 나는 aix에서 실행되는 ksh를 사용하여 쉘 스크립트에서 이것을 프로그래밍하고 있습니다.

awk '/FILE-HDRPQ/{x=substr ($0,11,6)}NR>1{print $0 > $TRANSDIR"/"x"_prchgrpt.txt";}' $TRANSDIR/$prcfile

FILE-HDRPQ는 헤더의 첫 번째 부분입니다. $0에는 이 헤더부터 다음 헤더 앞의 행까지의 모든 열이 포함됩니다. x = $0(맨 위 헤더 라인 제외)이 덤프될 파일 이름을 생성하는 데 사용되는 헤더의 식별 번호입니다.

$TRANSDIR 및 $prcfile 변수는 파일 이름을 지정하고 올바른 디렉터리에 배치하는 데 도움이 됩니다. 이러한 변수는 스크립트의 앞부분에서 호출됩니다.

나는 지금 얻는다

awk: 0602-562 $() 필드가 잘못되었습니다.

스크립트를 실행할 때. 나는 평생 동안 무엇이 잘못되었는지 알아낼 수 없습니다. 작은따옴표와 큰따옴표를 사용해 보았습니다.

답변1

항상 필드 값으로 해석하려고 합니다 $<something>(예: $0- 전체 레코드, $3- 세 번째 필드, $NF- 마지막 필드 값)

변수를 통해 디렉터리 이름을 전달합니다.

awk -v dir="$TRANSDIR" '/FILE-HDRPQ/{x=substr ($0,11,6)}
       NR>1{print $0 > dir"/"x"_prchgrpt.txt";}' "$TRANSDIR/$prcfile"

답변2

다음과 같이 TRANSDIR 변수를 awk에 명시적으로 전달해야 합니다.

awk -v TRANSDIR="$TRANSDIR"

그런 다음 다음과 같이 사용하십시오.

print $0 > TRANSDIR

awk 스크립트 내에서.

관련 정보