我需要更新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
答案 0 :(得分:4)
在awk
中,您可以使用sprintf
添加零填充:
awk -F';' -v OFS=';' '{$6 = sprintf("%04d", $6); print}' input.csv > output.csv
答案 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