【发布时间】:2014-10-11 23:21:01
【问题描述】:
我有文件的行应该是
U:<text>\tD:<text>\tA:<text>\n
其中 是一些没有制表符或换行符的文本。 \t 是制表符,\n 是换行符。不幸的是,一些 字段包含换行符,因此结构被破坏。比如这样:
U:uuu D:ddd A:aaa
U:uuu D:ddd A:aaa
U:uu
u D:ddd A:aaa
U:uuu D:ddd A:aaa
这里在第 3 行的 U 字段中有一个换行符,导致一些应该在第 3 行的内容现在在第 4 行。如何使用 sed 或 tr 等工具修复结构?我想删除那些不在记录末尾的换行符。
所以例如上面的固定文件应该是这样的:
U:uuu D:ddd A:aaa
U:uuu D:ddd A:aaa
U:uuu D:ddd A:aaa
U:uuu D:ddd A:aaa
解决方案的另一个重要方面是速度,因为我要修复数千兆字节的文件。
【问题讨论】:
-
A:文本是否可以包含错误的换行符?<text>的任何部分是否可以包含A:或U:或D:?要处理的文件有多大?将整个文件放入内存是一种选择(例如,小于 1 GiB 的文件),还是必须更零碎地完成? 'continuation' 行上是否总是有前导空格? -
目前我只在 U 中找到了额外的换行符。但是如果代码可以修复 D 和 A 中潜在的额外换行符,那就太好了,但如果不能,也可以。文本中不应有任何 A: U: 和 D: 。可以假设该文件可以在 RAM 中读取。我实际上有数千个文件,但每个文件最多 2GB。
标签: linux bash sed terminal tr