1

入力として1行のテキストを受け取るシェル(AWK、Sedも問題ありません)プログラムを書きたいと思います。

その中に任意に分散された整数文字列があります。例えば

「12884 と 111933 は 2 つの数字で、323232 も数字です」

出力を

「12,884 と 1,11,933 は 2 つの数字であり、2,23,232 も数字です」

これが PHP の場合、単純な preg_replace_callback で目的は果たせますが、これをシェルにしたいと考えています。:/

どんなポインタでも大いに役立ちます。

4

2 に答える 2

0
for line in $(echo "12884 and 111933 are two numbers and 323232 is also a number" 
    | tr ' ' '\n');
    do 
        if [ $line -eq $line 2> /dev/null ]; 
            then printf "%'d\n" $line;
        else 
            echo $line; 
        fi; 
    done | tr '\n' ' '

これが長くて醜いかもしれないことは理解していますが、今のところ私ができる最善のことです。

説明に従います:

  • 最初に、行をさらに多くの行に分割して、ループして、どの文字列が数値で、どれが数値でないかを認識できるようにします
  • 次に、現在の文字列が数値かどうかをテストします
  • それが数値の場合、printfの使用法で解析します
  • そうでない場合は、単にエコーし、そのままにしておきます
  • ループを終了し、すべてを 1 行に戻します
于 2009-08-27T14:17:04.167 に答える