2.13464e+07 などの数字を避けるための HPUX 大数変換

2.13464e+07 などの数字を避けるための HPUX 大数変換

hpuxからキロバイトを取得するには、21858717696を1024で除算する必要がありますが、次のコマンドを使用すると機能しません。

echo 21858717696 | awk '{print $1/1024}'

出力:

2.13464e+07

AIX では、次のコマンドを使用でき、機能します。

echo 21858717696 | awk '{print $1/1024}' | bc -l | awk '{printf("%.0f\n", $1)}'

出力:

21346404

AIX 方式は HPUX では機能しません。 HPUXで同じ結果を得るにはどうすればよいですか?

答え1

HP-UXにはPerlが必要です。

echo 21858717696|perl -ne 'printf "%.0f\n",$_/1024'
21346404

答え2

これが私がすることですdc <<< "21858717696 1024/ p"

  • dcほとんどすべてのUnixにデフォルトでインストールされていると思います。 1991年から私が使っていたすべてが含まれています。
  • 私はプロセスです。
  • 正確で正確な結果を提供します。

シェルがこれを行わない場合は、<<<次のようにします。

echo "21858717696 1024/ p" | dc

答え3

すでに以下を使用しているのでbc

$ printf '%s/1024\n' 21858717696 | bc
21346404

または

$ echo '21858717696/1024' | bc
21346404

bcまたは計算を実行できる他の組み合わせです。scale必要な小数点以下の桁数(デフォルトでは0)を設定するには、次の割り当てを含めます。

$ printf '%s\n' 'scale=4' '21858717696/1024' | bc
21346404.0000

最も重要なのは、bc実際の計算を実行することです。

答え4

なぜawkの結果を印刷しないのですか? 2番目のawkは必要ありません。

$ echo 21858717696 | awk '{printf "%.0f\n", $1/1024}'
21346404

私が欠けていない場合は、これは2番目のコマンドとまったく同じです。

$ echo 21858717696 | awk '{print $1/1024}' | bc -l | awk '{printf("%.0f\n", $1)}'
21346404

私のLinuxシステムでは、より大きな数字とbusybox awkを介してのみこれを再現できます。

$ echo 12321858717696000000000 | ./awk '{print $1/1024}'
1.20331e+19

しかし、busybox awkを使用しても期待printfどおりに機能します。

$ echo 12321858717696000000000 | ./awk '{printf "%.0f\n",$1/1024}'
12033065153999998976

関連情報