sed/awk:每隔 n 个字符插入逗号

Posted

技术标签:

【中文标题】sed/awk:每隔 n 个字符插入逗号【英文标题】:sed/awk: insert commas every nth character 【发布时间】:2015-07-10 13:23:38 【问题描述】:

文件的内容类似于:

12345678123456781234567812345678
12345678123456781234567812345678

我想将这些行转换为:

12345678,12345678,12345678,12345678
12345678,12345678,12345678,12345678

【问题讨论】:

您自己尝试过解决此问题的方法吗? 【参考方案1】:

我会为此使用 GNU awk,如下所示:

gawk '$1=$11' FPAT='.8' OFS=, input.file

说明:

这个 awk 解决方案的关键是使用 FPATOFS 变量。请注意,FPAT 是特定于 gawk 的,这就是该解决方案仅适用于 GNU awk (gawk) 的原因。

FPAT - 字段模式 定义了一个正则表达式,字段应该是什么样子。在我们的例子中,一个字段由 8 个任意字符组成:.8

OFS 变量 - 输出字段分隔符 用于将逗号定义为输出中各个字段之间的分隔符。

$1=$1 看起来基本上像 NOP 操作,但是它触发 awk 重新组合当前记录 - 使用我们之前定义的 OFS1 始终为真,并让 awk 打印重新组装的记录。

【讨论】:

【参考方案2】:

使用 sed 你可以做到

$ sed -r 's/(.8)/\1,/g;s/,$//' <<< "12345678123456781234567812345678"
12345678,12345678,12345678,12345678

【讨论】:

只是一个提示,你不需要捕获组,你可以使用s/.8/\0,/g;s/,$//.. 我不满意需要在最后删除尾随命令,这就是我为什么建议使用awk。但是由于问题被标记为sed,所以加了1!

以上是关于sed/awk:每隔 n 个字符插入逗号的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sed/awk 替换逗号分隔字符串中的第 n 列/字段?

三剑客-sed awk

在 Java 中每隔 3 个逗号分割一个字符串

十七. 正则以及grep ,sed,awk的简单应用

c语言中,输入一组数如:12345678,从数尾开始,每三位插入一个逗号。

sql server里如何将一组用逗号分隔的字符串分解并插入到另一张表中,比如:11873,27827, 也可能是好多