如何在awk中用零填充CSV第一列?

时间:2017-05-31 08:03:19

标签: bash csv awk gawk

我有这样的CSV:

1,"Paris","3.57"
10,"Singapore","3.57"
211,"Sydney","3.28"
324,"Toronto Center","3.33"

我想用零填充第一列:

001,"Paris","3.57"
010,"Singapore","3.57"
211,"Sydney","3.28"
324,"Toronto Center","3.33"

我尝试使用awk:

将第一列分配给printf的输出
awk '{ $1 = printf("%03d", $1); print }' my.csv

但它给了我一个语法错误:

awk: cmd. line:1: { $1 = printf("%03d", $1); print }
awk: cmd. line:1:        ^ syntax error

如果引用printf函数,它也不起作用。

我怎么能这样做?

3 个答案:

答案 0 :(得分:4)

如果您只想格式化一个字段的文本,则可以使用sprintf的{​​{1}}。

awk

或标准方式:

   awk '{ $1=sprintf("%03d", $1)}1' csvfile

根据OP的更新内容:

   awk '{printf "%03d %s\n", $1,$2}' csvfile

答案 1 :(得分:3)

printf不是函数,它是关键字,无法分配其结果。

要返回格式化字符串,请使用sprintf 一个函数):

awk -F, -v OFS=, '{ $1 = sprintf("%03d", $1) } 1' file

有必要设置FS(通过-F)和OFS,以便在awk重新格式化该行时,字段分隔符保持不变。

答案 2 :(得分:0)

awk '{printf("%03d", $1) ; print " "$2}' my.csv