特定の列の数値形式を再指定します。

特定の列の数値形式を再指定します。

3番目の列が10進数のセミコロンで区切られたデータがあります。

A;B;1234.56
C;D;789.23

数値形式を2つ変更する必要があります。

  1. 小数点の後の数字の削除
  2. 数字に「千単位の区切り記号」を追加

だから1234.56それはなります1'234

最初の部分を完了できましたが、千単位の区切り文字を追加する方法がわかりません。

printf "A;B;1234.56\nC;D;789.23\n" | awk -F';' '{gsub(/\.../,"",$3) ; printf "%s,%s,%s\n", $1, $2, $3 }'

どうすればいいですか?

ベストアンサー1

LC_NUMERIC='en_US.UTF-8'ロケール(数字の千単位の区切り形式でコンマをサポートしています)を使用し、sprintf's %\047d(一重引用符で作成された%\047d別のタイプ)を使用します。%'d8進エスケープシーケンスまたは%'\''d作成することもできます)浮動小数点を整数に強制変換して使用する型修飾子斑点千単位の区切り文字として使用すると、このgsub()関数を使用してコンマを一重引用符に変換します。

$ LC_NUMERIC='en_US.UTF-8' awk 'BEGIN{ FS=OFS=";" }
  { $3=sprintf ("%\047d", $3); gsub(",", "\047", $3) }1' infile
A;B;1'234
C;D;789

おすすめ記事