首页 > 解决方案 > 如何在所有超过 8 位的号码的 4 位后插入逗号

问题描述

我有看起来像这样的 csv 文件:

12625,6475,387,-388,-332,-217,-104,17,125,160,121,38,-101,-282,-368
-2675,6475,420,-385,-330,-217,-106,16,124,158,120,37,-104,-281,-365
2725,6475,633,-377,-327,-222,-117,6,113,148,109,26,-114,-282,-359
-12775,6475,927,-367,-324,-229,-133,-9,99,134,95,11,-128,-283,-351
12825,64751200,-357,-320,-236,-147,-23,86,121,82,-3,-140,-283,-344
          ^ missing comma

在某些行中,我遇到了示例最后一行中显示的问题,其中第二列和第三列之间缺少逗号。我从数据中知道,合法条目最多可以有 5 个数字(在某些情况下,前面有一个 -),所有有 8 个数字的条目都来自缺少的逗号,逗号应该出现在第四个数字之后。

我正在查看一个表达式 - 大概是sed- 在文件中所有 8 位数字的第四位数字之后插入一个逗号。

到目前为止我所拥有的是

echo "12356" | sed 's/\B[0-9]\{3\}/&,/g'

这将在四位数字后插入一个逗号。如何过滤以使这种情况仅发生在 8 位数字上,而不是 5 位数字上。

我也对可能存在的解决该问题的任何更优雅的方式持开放态度。

谢谢

标签: bashcsvsed

解决方案


尝试这个sed

sed -E 's/([0-9]{4})([0-9]{4})/\1,\2/g'

推荐阅读