首页 > 解决方案 > awk 到 csv 文件的字符串字段的零填充

问题描述

我需要用零填充 csv 文件的第 6 列,但是当我尝试使用以下命令时,它只是将实际值替换为 0000。

awk -F',' -v OFS=',' '{$6 = sprintf("%04d", $6); print}' $Input

输入:

"xx","x","xxxxxx","xxx","xx","123","xxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx" ,"23","xxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","3","xxxxxxxx","xxxxx"
"xx","x" ,"xxxxxx","xxx","xx","4123","xxxxxxxxx","xxxxx"

输出:

"xx","x","xxxxxx","xxx","xx","0123","xxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx" ,"0023","xxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","0003","xxxxxxxx","xxxxx"
"xx","x" ,"xxxxxx","xxx","xx","4123","xxxxxxxxx","xxxxx"

标签: shellawk

解决方案


您可以将其awk与自定义字段分隔符一起使用","

awk 'BEGIN {FS=OFS="\",\""} {$6 = sprintf("%04d", $6)} 1' file

"xx","x","xxxxxx","xxx","xx","0123","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","0023","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","0003","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","4123","xxxxxxxxx","xxxxx"

推荐阅读