awk:行1:>または近くで構文エラーが発生しました。

awk:行1:>または近くで構文エラーが発生しました。

上記の構文エラーが発生しますが、何が問題であるかを復号化できません。 BASHで浮動小数点値を実行しようとしています。

だから私はawk目標を達成するために呼び出されたこのコマンドを使用しました。

while $empty; do
    empty=false
    echo -n "Price : "; read getPrice

#float value using awk
awk 'BEGIN{if ('$getPrice'>'0') exit 1}'
    if [ $? -eq 1 ]; then
    PRICE[$COUNT]=$getPrice;

else
    empty=true 
    echo "Please put in the correct price figure!"
fi

done

ただし、このエラーが発生しました。

awk:行1:>または近くで構文エラーが発生しました。

getPriceこのエラーは、変数に値を入力しなかった場合に発生します。ところで、何らかの値を入力するとうまく動作します>0。多くの考えをしても、まだ構文の問題を理解していません。挨拶。

ベストアンサー1

Awkスクリプトで構文エラーが発生する理由は、空のときにスクリプトが$getPrice実際には

BEGIN{if (>0) exit 1}

シェル変数をAwk変数としてAwkスクリプトにインポートする正しい方法は、次の方法を使用することです-v

awk -vprice="$getPrice" 'BEGIN { if (price > 0) exit 1 }'

また、スクリプトの制御フローを見てみましたが、$empty変数を使用する代わりに正しい価格を入力してループを終了することもできます。

while true; do
    read -p 'Price : ' getPrice

    # compare float value using awk
    if awk -vprice="$getPrice" 'BEGIN { if (price <= 0) exit(1) }'
    then
      PRICE[$COUNT]="$getPrice"
      break
    fi

    echo 'Please put in the correct (positive) price figure!' >&2
done

コメント後の追加情報:

入力した値が数値でないか負の場合は、入力が無効であることを警告する必要があります。入力値にはできない文字(0〜9と小数点を除くすべての文字)があるかどうかをテストできます。

while true; do
    read -p 'Price : ' getPrice

    if [[ ! "$getPrice" =~ [^0-9.] ]] && \
        awk -vprice="$getPrice" 'BEGIN { if (price <= 0) exit(1) }'
    then
        PRICE[$COUNT]="$getPrice"
        break
    fi

    echo 'Please put in the correct (positive) price figure!' >&2
done

おすすめ記事