我正在处理大型文本数据集,大小约为1GB(最小的文件约有200万行)。每一行都应该被分成若干列。我说“假设”是因为有例外;虽然正常的线以\r\n
结束,但是它们中的大量被不正确地划分成2到3条线。
假设有10列,每行应该具有以下格式:
col_1 | col_2 | col_3 | ... | col_10\r\n
例外情况的格式如下:
1. col_1 | col_2 | col_3 ...\n
... | col_10\r\n
2. col_1 | col_2 | col_3 ...\n
... | col_10\n
\r\n
纠正这些异常的最快方法是什么?我在文本编辑器(TextMate,在Mac上)中使用正则表达式(^[^\r\n]*)\n
(替换为$1
)对1000行的示例进行了简单的查找/替换,它工作得很好。但是文本编辑器显然不能处理大文件(>= 200万行)。这些可以用sed
或grep
(或在其他命令行工具中,甚至在Python中)使用等效的正则表达式来完成吗?如何完成?
3条答案
按热度按时间cbjzeqam1#
您的方法:
或者,消极的lookbehind:
或者,删除所有
\n
,并将每个\r
替换为\r\n
:fcwjkofz2#
为什么不awk?:
或tr + sed:
ohtdti5x3#
不需要花哨的
regex
-只需5个awk
内置变量就足够了: