将CSV填充为CSV unix / Linux文件中的列

时间:2016-01-08 22:52:34

标签: linux unix awk sed scripting

我需要更新CSV linux / unix数据文件中的列。 CSV文件大约有7列,需要更新第6列并使其具有4位数值。 第6列的数字少于4位,但我需要通过在它们前面填充0来使所有值都有4位数。

是否有任何awk或sed命令可以将列值更新为文件中的4位数?

510;1093424;0;4485;C;12;109-04-115
510;109324;0;4485;C;1232;109-04-1151
510;109342;0;4485;C;1;109-04-1151
510;10424;0;4485;C;12;109-04-115

假设样本文件在上面,我需要第6列为4位数,并在其前面添加零,如下所示:

510;1093424;0;4485;C;0012;109-04-115
510;109324;0;4485;C;1232;109-04-1151
510;109342;0;4485;C;0001;109-04-1151
510;10424;0;4485;C;0012;109-04-115

任何建议都会有所帮助

问候 HG

3 个答案:

答案 0 :(得分:4)

awk中,您可以使用sprintf添加零填充:

awk -F';' -v OFS=';' '{$6 = sprintf("%04d", $6); print}' input.csv > output.csv

DEMO

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed -r 's/[^;]+/\n0000&\n/6;s/\n.*(.{4})\n/\1/' file

在字段6的前面插入4 0。然后将该字段从右侧缩小到4。

答案 2 :(得分:0)

它不是一个优雅的代码,但会给出您期望的结果。 AWK

BEGIN { FS=OFS=";"}{ len=length($6); to_edit=$6; s=""; for(i=len;i<4;i++){ s=s "0"; } print $1 FS $2 FS $3 FS $4 FS $5 FS s to_edit FS $7; }

$ awk -f padding.awk padding.txt
510;1093424;0;4485;C;0012;109-04-115
510;109324;0;4485;C;1232;109-04-1151
510;109342;0;4485;C;0001;109-04-1151
510;10424;0;4485;C;0012;109-04-115