【问题标题】:padding zero to a column in CSV unix/Linux file将零填充到 CSV unix/Linux 文件中的列
【发布时间】:2016-04-13 17:58:31
【问题描述】:

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

【问题讨论】:

  • 建议:在有人因缺乏信息和努力而结束问题之前,张贴一些示例输入和预期输出以及您迄今为止尝试过的内容。不,我们不希望看到有 100 列的文件 - 让它变得简洁。

标签: linux unix awk sed scripting


【解决方案1】:

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

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

DEMO

【讨论】:

  • BEGIN{FS=OFS=","}。如果早在 1970 年代他们像使用 shell 一样使用 IFS 作为输入,那不是很好吗,然后 FS 可能意味着“输入和输出”,以节省必须为您想要的常见情况指定 2 个不同的变量输入和输出的相同字段分隔符?哦,好吧...
  • 嗨,Barmer,我试过了,但这不起作用,例如在最后添加零'
  • 你能在问题中添加几行示例吗?
  • 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 有什么建议吗??
  • 把它放在问题中以便保留换行符。
【解决方案2】:

这可能对你有用(GNU sed):

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-11
      • 2021-12-12
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      相关资源
      最近更新 更多