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。全体的に、あなたの質問は私たちに少しのコードを与えていますが、あなたの質問に完全に答えるための手がかりは提供していません。

関連情報