在 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使用的是 shell。请帮忙。

答案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您的脚本到底来自哪里。总的来说,您的问题为我们提供了一些代码,但没有提供任何线索来完全回答您的问题

相关内容