我有这样的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函数,它也不起作用。
我怎么能这样做?
答案 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