【问题标题】:sed - inserting a comma after every 4th line in plain text filesed - 在纯文本文件的每 4 行之后插入一个逗号
【发布时间】:2013-09-15 02:51:01
【问题描述】:

我正在尝试使用 sed 在第 1、4、8 等行的值之后插入逗号,

sed '0-4 s/$/,/' in.txt > in2.txt

由于某种原因,这不起作用,所以我想知道是否有人使用 awk、sed 或任何其他方法来解决此问题。

我得到的错误是

sed: 1: "0-4 s/$/,/": invalid command code -

目前我的数据如下所示:

 城市
        地址
        邮政编码
        县

我试图像这样格式化它

 城市,
        地址
        邮政编码
        县

非常感谢。

【问题讨论】:

    标签: sed awk


    【解决方案1】:

    0-4 确实不是格式良好的sed 语法。我会为此使用awk,但两者都可以轻松实现。

    sed 's/$/,/;n;n;n' file
    

    替换一行并打印它,然后不替换地打印接下来的三行,然后从脚本的开头重新开始;或

    awk 'NR % 4 == 1 {sub(/$/,",")} {print}'
    

    如果行号模 4 为 1,则进行替换,然后无条件打印。

    Sed 的寻址模式有时有点令人失望;没有标准的方法来计算线偏移,相对或参考例如文件的结尾。当然,awk 比较复杂,但如果你只能学习其中之一,那绝对是awk。 (或者在当今时代,Python 或 Perl 是更好的投资。)

    【讨论】:

    • 非常感谢,成功了!肯定会给 awk 更多的关注。
    【解决方案2】:

    这可能对你有用(GNU sed):

    sed '1~4s/$/,/' file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多