重新格式化特定列中的数字

重新格式化特定列中的数字

我有分号分隔的数据,其中第三列是十进制数:

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只是另一种%'d使用单引号编写的类型八进制转义序列,或者你%'\''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

相关内容