2

次を出力するbashスクリプトがあります。

SUM = 137892134.0000000

文字列の最初の部分を取り除き、数値だけを残して、可能であれば整数としてフォーマットする必要があります。使用する必要sedがあると思いますが、それを習得する能力がゼロのようです。

値が 100 未満の場合に動作する条件ステートメントを記述できるようにする必要があります。bash スクリプトでこれを実行できるかどうかはわかりませんが、それは私の課題の 2 番目の部分になります。

4

4 に答える 4

2

sedによる置換の基本的な形式は次のとおりです。

s/replace this/with this/

ここで、「これを置き換える」と「これを使用する」はどちらも正規表現です。あなたの場合、最初のリテラル文字列「SUM=」と最後の小数を完全に削除したいとします。それで:

#!/bin/bash
sum=$(your_script.sh | sed 's/^SUM = //' | sed 's/\..*//')
if ! egrep -q '^[0-9]+$' <<< $sum; then
    echo "your_script.sh printed unexpected output!"
    exit 1
fi
if [ $sum -lt 100 ]; then
    echo "$sum is less than 100"
else
    echo "$sum is not less than 100"
fi

最初の行は、「SUM=137892134.0000000」を「137892134」に変換するものです。最初のsedは、文字列()の先頭にある「SUM =」^を何も置き換えません(つまり、削除します)。2番目のsedは、最初のピリオド文字(\.)を見つけて、それ以降のすべての文字().*を何も置き換えません。$sum結果の文字列は、を使用して変数に保存されます$(...)

$sumegrepを使用するifステートメントは、保存した値が実際に整数であることを確認し、そうでない場合はベイルします。

2番目のifステートメントは、整数であることがわかっている$sumの値を100と比較します。

于 2013-03-15T18:03:03.830 に答える
2

「123.789」をどのように処理したいか(整数として印刷するときに124または123を印刷するかどうか)は明確ではありません。検討:

if $( echo SUM = 137892134.0000000 | awk '{printf "%d", $3}' ) -lt 100; then
   echo the value is less than 100!!
fi

次のこともできます。

if echo SUM = 137892134.0000000 | awk '$3 >= 100 { exit 1}'; then
    echo the value is less than 100!!
fi

また

if ! echo SUM = 137892134.0000000 | awk '{exit $3 < 100}'; then
     echo the value is less than 100!!
fi

1を返すと失敗と評価されるため、ロジックは少し複雑であることに注意してください。そのawkため、比較演算子は予想されるものの逆になります。

于 2013-03-15T18:20:48.843 に答える
1

sedこれを行うために使用する 1 つの方法を次に示します。

echo 'SUM = 137892134.0000000' | sed 's/[^0-9.]//g' | sed 's/\..*//g'

出力は次のようになります137892134

コマンドに関するいくつかの説明:

  • sed 's/[^0-9.]//g'数字 ( - ) またはピリオド ( )sed以外の文字を削除するように指示します。09.

  • sed 's/\..*//g'小数点以下 ( ) の後の文字 ( )をsed削除するように指示します。.*\.

  • また、を使用する代わりにecho、元のスクリプトからの出力を最初の部分に使用できます...そしてsed、最終的に必要な「int」を取得するためにパイプすることができます。

注: これは、William Pursell によって提起された丸めの問題を考慮していません。

于 2013-03-15T17:59:05.987 に答える
0

私は提案します:

bashScript | sed 's/.* \(.*\)\.0*/\1/'

英語で:「たくさんのもの、スペース、何か、ドット、そしておそらくいくつかのゼロを取り、それらすべてを何かに置き換えてください。」

于 2013-03-15T18:05:35.383 に答える