-2
mailx -s "Report for $DATE_TENDAYS_FORMAT1" -r uname@host.com uname@host.com <<EOF

Total Items Purchased as per EDW: `echo $QUERY_TEN_DAYS3 | awk '{print $1}'`

Total Items Missing or Mismatch : `echo $QUERY_TEN_DAYS3 | awk '{print $2}'`

Mismatch  Percentage: `100*((echo $QUERY_TEN_DAYS3 | awk '{print $2}')/(echo $QUERY_TEN_DAYS3 | awk '{print $1}'))`

EOF

mailx上記の構文を使用してメールを送信しようとすると、常に 3 行目にエラーが発生します(Mismatch Percentage) on * sign。3行目の乗算プロセスで何か問題がありますか?

アップデート:-

TEST1=`echo $QUERY_TEN_DAYS3 | awk '{print $1}'`
echo $TEST1

TEST2=`echo $QUERY_TEN_DAYS3 | awk '{print $2}'`
echo $TEST2

mailx -s "Report for $DATE_TENDAYS_FORMAT1" -r uname@host.com uname@host.com <<EOF
Comparison using previous day’s data

******************************************

Mismatch  Percentage: $((100 * ($TEST2/ $TEST1)))

EOF

上記のコードを試してみましたが、最初の行で( unexpected. なぜそれが起こっているのですか?

4

4 に答える 4

1

小数部分に事前定義された変数を使用すると、長いコマンドラインと混乱を避けることができます。

実際、パーツを抽出するためにecho+を実行するのはやり過ぎのようです。awkモジュールの他の側面によっては、それらを。ではなく、最初に別々の変数に入れる方がよい場合があります$QUERY_TEN_DAYS3

$QUERY_TEN_DAYS3さて、私たちが立ち往生していて、それが形式の空白で区切られた値であると仮定すると、それを分割"DIVISOR DIVIDEND ..."する別の方法は次のようになります。

read -r FOO BAR JUNK <<<"$QUERY_TEN_DAYS3"

次に、次のようになります。

mailx -s "Report for $DATE_TENDAYS_FORMAT1" -r uname@host.com uname@host.com <<EOF

Total Items Purchased as per EDW: $FOO

Total Items Missing or Mismatch : $BAR

Mismatch  Percentage: $((100 * ($BAR / $FOO)))

EOF

最初に除算を行う(乗算する前に切り捨てる)ための括弧の配置は難しいように見えますが、それはあなたが上で持っていたものです。変数を使用すると、このようなポイントを見つけるのがはるかに簡単になります。

于 2012-10-02T01:10:47.677 に答える
1

私のために働く:

したがって、問題は、実際に使用していないbash(または最近のバージョン)、ここに投稿したものを実行していない、間違った入力、スクリプト ファイルの EOL 文字の問題など、さまざまな可能性があります。

$ echo $BASH_VERSION
3.00.15(1)-release

$ QUERY_TEN_DAYS3="1 2"

$ TEST1=`echo $QUERY_TEN_DAYS3 | awk '{print $1}'`
$ echo $TEST1
1

$ TEST2=`echo $QUERY_TEN_DAYS3 | awk '{print $2}'`
$ echo $TEST2
2

$ cat <<EOF
> Comparison using previous day’s data
>
> ******************************************
>
> Mismatch  Percentage: $((100 * ($TEST2/ $TEST1)))
>
> EOF
Comparison using previous day’s data

******************************************

Mismatch  Percentage: 200
于 2012-10-03T02:35:17.137 に答える
0

これを試してください:

$((100 * $(echo $QUERY_TEN_DAYS3 | awk '{print $2}') / $(echo $QUERY_TEN_DAYS3 | awk '{print $1}')))

exprコマンドまたはletコマンドを使用するさまざまな方法もあります。

于 2012-10-02T00:26:28.713 に答える
0

これがbashシェルであると仮定すると、次のような式を使用できます

$((100 * 4))

算術式の評価を取得します。「4」を指定したより大きな式に置き換えます。

于 2012-10-02T00:18:51.297 に答える