【问题标题】:Splitting lines into columns将行拆分为列
【发布时间】:2012-05-20 11:13:26
【问题描述】:

我有问题。现在,一个应该用制表符分隔的文件缺少一些“换行符”......我的文件现在看起来像这样

Field1 Field2 Field3
Field1 Field2 Field3 Field1 Field2 Field3 Field1 Field2 Field3
Field1 Field2 Field3 Field1 Field2 Field3
Field1 Field2 Field3
Field1 Field2 Field3 Field1 Field2 Field3
Field1 Field2 Field3

我想让它看起来统一,每个“field1”都从一个新行开始

Field1 Field2 Field3
Field1 Field2 Field3
Field1 Field2 Field3
Field1 Field2 Field3
Field1 Field2 Field3

问题是,这些列中的每一列都有一组唯一的数据,所以我找不到熟悉的地方将其拆分为新行。非常感谢任何帮助!

PS:非常感谢在 sed 或 tr 中执行此操作 PS:最多可以有 150 列,而不仅仅是 6 或 9 或 3 的任何其他倍数

【问题讨论】:

  • 如果找不到分割的地方,是什么让你认为一个非智能的分割工具可以?
  • 好吧,我希望有一种方法可以在每三个标签后拆分为一个新行
  • 但是第 5 行 Field3Field1 之间没有分隔符。
  • 几条规则不会有帮助吗?如果超过 3 列,请检查是 6 列还是 9 列并相应地添加新行。如果 number_of_columns % 3 不是 0,您需要手动检查吗?
  • 是时候回击您的数据提供者了。祝你好运。

标签: sed tr tabular csv


【解决方案1】:

这可能对你有用:

sed 's/\s/\n/3;P;D' file

解释:

  • 第三个空格字符(空格或制表符)被换行符s/\s/\n/3替换

  • 打印到第一个换行符之前的字符串P

  • 第一个换行符之前的字符串被删除D

    D 命令具有分裂的个性。如果没有换行符,则删除字符串并读入下一行。但是,如果存在换行符,则将字符串删除到换行符为止,然后在同一字符串上开始循环,直到不存在换行符为止。

【讨论】:

  • 如果您向我解释该命令的工作原理,我会给您最好的答案(顺便说一句)
【解决方案2】:

这将适用于您提供的示例...

sed -e 's/\([^\t ]* [^\t ]* [^\t ]*\)[\t ]/\1\n/g'

【讨论】:

    猜你喜欢
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多