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

将零填充到CSV unix/Linux文件中的列,linux,unix,awk,sed,scripting,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;10

我需要更新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

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

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

这可能适合您(GNU-sed):


在字段6前面插入4
0
。然后从右边将该字段的长度减少到4。

这不是一个优雅的代码,但给出了您期望的结果。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

BEGIN{FS=OFS=“;”}{leng=length($6);to_edit=$6;s=“”;for(i=len;issuggestion:在有人因为缺乏信息和努力而结束问题之前,发布一些示例输入和预期输出以及您迄今为止尝试过的内容。不,我们不希望看到一个包含100列的文件-使其简洁。
BEGIN{FS=OFS=“,”)
。如果在20世纪70年代,他们像使用shell一样使用IFS进行输入,那么FS可能意味着“输入和输出”,这不是很好吗为了避免为输入和输出使用相同的字段分隔符的常见情况指定两个不同的变量?哦,好吧…嗨,巴默,我试过了,但没有用。最后一个问题是加零。你能给问题添加几行样本吗?510;1093424;0;4485;C;12;109-04-115510;109324;0;4485;C;1232;109-04-115510;109342;0;4485;C;1;109-04-1151510;10424;0;4485;C;12;109-04-115假设示例文件在上面,我需要第6列是4位数字,前面加上零,如下所示:510;1093424;0;4485;C;0012;109-04-115510;109324;0;4485;C;1232;109-04-1151510;109342;0;4485;C;0001;109-04-1151;109-1151 510;10424;0;4485;C;0012;109-04-115有任何建议吗t,以便保留换行符。
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