awk: 0602-562 Поле $ () неверно. в сценарии ksh на AIX

У меня есть текстовый файл, который имеет информацию для нескольких местоположений. Каждый новый раздел в файле имеет заголовок. Я пытаюсь взять всю информацию под одним заголовком, вычеркнуть заголовок и перенести его в отдельный файл. Все разделы перемещаются в отдельный файл на основе информации заголовка. Я программирую это в сценарии оболочки, используя ksh, работающий на aix.

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 Поле $ () неверно.

когда я запускаю скрипт. Невозможно для жизни меня выяснить, что не так. Я пробовал играть с одиночными и двойными кавычками.

awk всегда пытается интерпретировать $<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" 

Вы должны передать переменную TRANSDIR в awk явно, например:

 awk -v TRANSDIR="$TRANSDIR" 

и затем используйте его следующим образом:

 print $0 > TRANSDIR 

внутри скрипта awk.