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

sed/awk: insert commas every nth character

文件内容如下:

12345678123456781234567812345678
12345678123456781234567812345678

我想将这些行转换为:

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

用 sed 你可以做到

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

我会使用 GNU awk,像这样:

gawk '{=}1' FPAT='.{8}' OFS=, input.file

解释:

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

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

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

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