Usando una variable para recuperar un elemento de matriz dentro de la declaración awk

Usando una variable para recuperar un elemento de matriz dentro de la declaración awk

A continuación se muestra la parte del código que arroja error.

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

Cuando ejecuto el script en modo de depuración, puedo ver que no se está considerando el valor de p.

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

Estoy ejecutando el script como ./script.shy /bin/kshse utiliza el shell. Por favor ayuda.

Respuesta1

En primer lugar, esto está mal:

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

${array1[$i]}no es un archivo, por lo que no puedes simplemente lanzarlo como primer argumento de línea de comando en awk. Con las variables tendrías que usar una echo $VARIABLEcadena o aquí <<<como esta

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

En segundo lugar, existe una cuestión de alcance. array3[p]="123"solo existe dentro awkdel código, por lo que no puede asignar nada fuera de él. Sin embargo, lo que podrías hacer es simplemente hacerlo.

array3[$p]="123"

Tampoco está claro $ide dónde viene exactamente su guión. En general, su pregunta nos proporciona un poco de código pero no proporciona ninguna pista para responder completamente a su pregunta.

información relacionada