gawk: カンマ区切り文字でフォーマットされた浮動小数点数の合計

gawk: カンマ区切り文字でフォーマットされた浮動小数点数の合計

gawkが整数計算を実行している間は、カンマを区切り文字として使用して浮動小数点の合計を計算しようとしています。スクリプトは次のとおりです。

BEGIN {
  FS=";"
  OFS=";"
  CONVFMT = "%2.2f"
}
{ 
  print $1
  print $2
  print $1+$2 
}

私はこのデータファイルを使用しています:

4,3;5,7

次のようにスクリプトを呼び出します。

LC_ALL=fr_BE gawk -f test.awk < t.txt

私は次のような結果を得ます。

4,3
5,7
9

fr_BEロケールを設定しましたが、結果はまだ正しくありません。この問題をどのように解決できますか?

答え1

答えは--use-lc-numericgawkオプションを使用することです。

--use -lc-番号

これは、gawkが入力データを解析するときにロケールの10進文字を使用するように強制します。 POSIX 標準ではこの動作を要求し、gawk は --posix が適用されるときにそうしますが、デフォルトはピリオドが小数点ではなくロケールでもレガシー動作に従い、ピリオドを小数点として使用することです。性格。このオプションは、--posixオプションの完全な厳密さなしにデフォルトの動作をオーバーライドします。

はい

次のデータファイルがあるとしましょう。

$ cat t.txt 
4,3;5,7
4,9;5,7

出力を見やすくするために、次の行を変更しましたtest.awk

print "Total: "$1+$2 

ここで上記のスイッチを使用して実行すると、次のようになります。

$ LC_ALL=fr_BE gawk --use-lc-numeric -f test.awk < t.txt
4,3
5,7
Total: 10
4,9
5,7
Total: 10,60

引用する

答え2

問題は、gawk文字列を4,3floatに変換できないことです。,と交換して解決できます.。 @glenn jackmanの場合は、次のように入力します。

BEGIN {
  FS=";"
  OFS=";"
  CONVFMT = "%2.2f"
}
{
  gsub(",",".",$0)
  print $1
  print $2
  print $1+$2
}

$ LC_ALL=fr_BE gawk -f test.awk < file
4.3
5.7
10
4.9
5.7
10.6

関連情報