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 解决方案的关键是 FPAT
和 OFS
变量的使用。请注意,FPAT
是特定于 gawk 的,这就是该解决方案仅适用于 GNU awk (gawk) 的原因。
FPAT
- 字段模式 定义一个正则表达式字段应该是什么样子。在我们的例子中,一个字段由 8 个任意字符组成:.{8}
OFS
变量 - 输出字段分隔符 用于将逗号定义为输出中各个字段之间的分隔符。
{=}
看起来基本上像 NOP
操作,但是它会触发 awk 重新组合当前记录 - 使用我们之前定义的 OFS
。 1
始终为真并使 awk 打印重新组合的记录。
文件内容如下:
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 解决方案的关键是 FPAT
和 OFS
变量的使用。请注意,FPAT
是特定于 gawk 的,这就是该解决方案仅适用于 GNU awk (gawk) 的原因。
FPAT
- 字段模式 定义一个正则表达式字段应该是什么样子。在我们的例子中,一个字段由 8 个任意字符组成:.{8}
OFS
变量 - 输出字段分隔符 用于将逗号定义为输出中各个字段之间的分隔符。
{=}
看起来基本上像 NOP
操作,但是它会触发 awk 重新组合当前记录 - 使用我们之前定义的 OFS
。 1
始终为真并使 awk 打印重新组合的记录。