Usando variável para recuperar o elemento da matriz dentro da instrução awk

Usando variável para recuperar o elemento da matriz dentro da instrução awk

Abaixo está a parte do código que está gerando erro.

for (( p=0; p<${var2}; p++ ))
do

if [[ ${array2[$p]} == *"xyz"* ]]
then
    awk -F" " '{ array3[p]="123" };1' ${array1[$i]}
else
    awk -F" " '{ array3[p]="456" };1' ${array1[$i]}
fi

Ao executar o script no modo de depuração, percebi que o valor de p não está sendo considerado.

+ awk '-F ' '{ array3[p]="456" };1' oct.csv

Estou executando o script como ./script.she /bin/ksho shell é usado. Por favor ajude.

Responder1

Em primeiro lugar, isto está errado:

awk -F" " '{ array3[p]="123" };1' ${array1[$i]}

${array1[$i]}não é um arquivo, então você não pode simplesmente lançá-lo como primeiro argumento de linha de comando para awk. Com variáveis ​​você teria que usar echo $VARIABLEou aqui uma string <<<assim

awk -F" " '{ array3[p]="123" };1' <<< ${array1[$i]}

Em segundo lugar, há uma questão de âmbito. array3[p]="123"só existe dentro awkdo código, então você não pode atribuir nada fora dele. O que você poderia fazer, no entanto, simplesmente faça

array3[$p]="123"

Também não está claro de onde $ivem exatamente em seu script. No geral, sua pergunta nos fornece um pouco de código, mas não fornece nenhuma pista para respondê-la completamente

informação relacionada