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