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

文件的内容类似于:

12345678123456781234567812345678
12345678123456781234567812345678

我想将这些行转换为:

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

【问题讨论】:

  • 您自己尝试过解决此问题的方法吗?

标签: awk sed comma


【解决方案1】:

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

gawk '{$1=$1}1' 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!
    猜你喜欢
    • 1970-01-01
    • 2015-09-22
    • 2012-04-07
    • 2021-01-05
    • 2017-12-24
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多