将线分成列

时间:2012-05-11 20:49:50

标签: sed tr tabular tab-delimited

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

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

的任何其他倍数

2 个答案:

答案 0 :(得分:2)

这可能对您有用:

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

说明:

  • 第三个空格字符(空格或制表符)替换为换行符s/\s/\n/3
  • 打印到第一个换行符的字符串P
  • 删除第一个换行符之前的字符串D

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

答案 1 :(得分:1)

这将适用于你给出的例子......

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