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

0

Abaixo está a parte do código que está jogando 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

Quando executo o script no modo de depuração, pude ver que o valor de p não está sendo considerado.

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

Estou executando o script como ./script.sh e /bin/ksh é o shell usado. Por favor ajude.

    
por user2568967 03.10.2016 / 21:48

1 resposta

0

Primeiro, isso 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 as variáveis, você teria que usar echo $VARIABLE ou aqui string <<< , assim como

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

Em segundo lugar, há uma questão de escopo. O array3[p]="123" existe somente no código awk , portanto você não pode atribuir nada a um fora dele. O que você poderia fazer, no entanto, simplesmente fazer

array3[$p]="123"

Também não está claro de onde exatamente $i vem do seu script. No geral, sua pergunta nos fornece um pouco de código, mas não fornece pistas para responder totalmente à sua pergunta

    
por 04.10.2016 / 00:05

Tags