Использование переменной для извлечения элемента массива внутри оператора awk

Использование переменной для извлечения элемента массива внутри оператора awk

Ниже приведена часть кода, вызывающая ошибку.

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

Когда я запустил скрипт в режиме отладки, я увидел, что значение p не учитывается.

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

Я запускаю скрипт как ./script.shи /bin/kshиспользуется ли оболочка. Пожалуйста, помогите.

решение1

Во-первых, это неверно:

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

${array1[$i]}не является файлом, поэтому вы не можете просто передать его в качестве первого аргумента командной строки в awk. С переменными вам придется использовать либо echo $VARIABLEили здесь строку, <<<например

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

Во-вторых, из всех, есть проблема области действия. array3[p]="123"существует только внутри awkкода, поэтому вы не можете назначить что-либо за его пределами. Однако, что вы могли бы сделать, просто сделайте

array3[$p]="123"

Также неясно, откуда именно $iберется в вашем скрипте. В целом, ваш вопрос дает нам немного кода, но не дает никаких подсказок для полного ответа на ваш вопрос

Связанный контент