我有分号分隔的数据,其中第三列是十进制数:
A;B;1234.56
C;D;789.23
我需要对数字的格式进行 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