在 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您的腳本到底來自哪裡。總的來說,您的問題為我們提供了一些代碼,但沒有提供任何線索來完全回答您的問題

相關內容