awk не имеет ничего общего с вашей оболочкой и наоборот. Вы столкнулись с проблемой из-за ошибки в вашем коде, которая была обнаружена при запуске разных версий awk, не вызывая awk из разных версий оболочки.
В некоторых awk, таких как стандартный BSD awk для Ma c OS for (k in j)
, присутствующая в коде, даже на участке, который не может быть достигнут, как в вашем случае, достаточно, чтобы awk идентифицировал j
как массив, так как вы используете операцию массива in
поэтому, когда awk встречает вас, вы рассматриваете j
как скаляр в другом месте вашего кода (for (j in a)
), awk говорит, что вы не можете этого сделать, потому что j
- это массив.
У вас есть другие проблемы в вашем коде, такие как использование конструкций gawk-only, таких как PROCINFO[]
, когда вы не запускаете gawk и смешиваете синтаксис индексации псевдо-многомерных массивов (a[i,j]
) с тестами для массивов, которые могли быть только создается с использованием синтаксиса gawks-массивов-массивов (a[i][j]
) и выполняет такие действия, как for (j in a) { if (j in a) {
, где if
не может быть невозможен, а также temp = a[j]; if (PROCINFO["temp"] == "array")
, где temp
не может быть массивом o r назначение было бы неудачным. Не стесняйтесь задавать новые вопросы, если вы хотите помочь с теми или иными аспектами вашего кода.