0

次の例の通貨文字列PHP10000$245に解析するシェルのワンライナーを探しています。文字列から数値を解析し、あらかじめ設定された変換係数を掛けてから、結果に "$" プレフィックスを追加する必要があります。

これまでのところ、私が持っているのはこれだけです:

echo PHP10000 | sed -e 's/PHP//'

10000結果として得られます。

今、私はその結果に乗算を行う方法にこだわっています。

これも解決できると思いawkますが、私はシェルコマンドの初心者です。

アップデート:

私は試した:

echo PHP10000 | expr `sed -e 's/PHP//'` \* 2

乗算は整数に対してのみ適切に機能します。このエラーが発生するため、浮動小数点数を使用できません: expr: not a decimal number: '2.1'.

4

4 に答える 4

2
value=PHP10000
factor=40.82
printf -v converted '$%.2f' "$(bc <<< "${value#PHP} / $factor")"
echo $converted    # => $244.98
  • その${value#PHP}部分は、文字列の先頭から PHP 文字列を削除するパラメーター展開です。$value
  • その<<<部分は bash here-stringであるため、式を bc プログラムに渡しています
  • bash は浮動小数点演算を行わないため、呼び出しbcて計算を実行します
  • printf -v varname他の言語と同等ですvarname = sprintf(...)
于 2013-02-10T12:27:47.700 に答える
1

何かのようなもの:

echo PHP10000 | awk '/PHP/ { printf "$%.0f\n", .0245 * substr($1,4) }'

これは、1 つの通貨 (クオート通貨と呼ばれる) に変換する多通貨バージョンに簡単に拡張できます。たとえば、次のようになります。

awk '
BEGIN {
    rates["PHPUSD"]=.01
    rates["GBPUSD"]=1.58
}
/[A-Z]{3}[0-9.]+/ {
    pair=substr($1,1,3) "USD"
    amount=substr($1,4)
    print "USD" amount * rates[pair]
}
' <<EOF
PHP100
GBP100
EOF

出力:

USD1
USD158
于 2013-02-10T10:38:06.100 に答える
1

一方通行:

echo "PHP10000" | awk -F "PHP" '{ printf "$%d\n", $2 * .0245 }'

結果:

$245

または、小数点以下 2 桁まで出力するには:

echo "PHP10000" | awk -F "PHP" '{ printf "$%.2f\n", $2 * .0245 }'

結果:

$245.00

編集:

Bash は浮動小数点演算をサポートしていません。bc代わりに使用してください:

echo "PHP10000" | sed 's/PHP\([0-9]\+\)/echo "scale=2; \1*.0245\/1" | bc/e'

結果:

245.00
于 2013-02-10T10:43:07.277 に答える
0

さらに別の選択肢:

$ echo "PHP10000" | awk 'sub(/PHP/,""){ print "$" $0 * .0245 }'
$245
于 2013-02-10T13:34:57.987 に答える