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