awk: 0602-562 O campo $ () não está correto. em um script ksh no AIX

1

Eu tenho um arquivo de texto com informações para vários locais. Cada nova seção no arquivo tem um cabeçalho. Eu estou tentando obter todas as informações em um único cabeçalho, remover o cabeçalho e movê-lo para um arquivo separado. Todas as seções se movem para um arquivo separado com base nas informações do cabeçalho. Eu estou programando isso em um shell script usando o ksh rodando no aix.

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

FILE-HDRPQ é a primeira parte do cabeçalho. $ 0 contém todas as colunas desse cabeçalho até a linha antes do próximo cabeçalho. x = um número de identificação no cabeçalho que é usado para criar o nome do arquivo que $ 0 (menos a linha de cabeçalho superior) será despejado.

Variáveis $ TRANSDIR e $ prcfile nos ajudam a nomear o arquivo e colocá-lo no diretório apropriado. Essas variáveis são chamadas mais cedo no script.

Agora estou chegando

awk: 0602-562 Field $() is not correct.

quando eu executo o script. Não pode pela vida de mim descobrir o que está errado. Eu tentei jogar com aspas simples e duplas.

    
por GingerBeard76 30.06.2017 / 21:12

2 respostas

2

o awk está sempre tentando interpretar $<something> como um valor de campo (por exemplo, $0 - o registro inteiro, $3 - o terceiro campo, $NF - o último valor do campo)

Nome do diretório de passagem via variável:

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

Você deve passar a variável TRANSDIR para awk explicitamente, assim:

awk -v TRANSDIR="$TRANSDIR"

e depois usá-lo assim:

print $0 > TRANSDIR

dentro do script awk.

    
por 30.06.2017 / 21:22

Tags