【发布时间】:2013-07-02 04:15:11
【问题描述】:
有一个包含 milions++ 行的文件。有些行的形式是
123456_654321_some-random-text ( e.g. /\d{6}_\d{6}_(.*)/ )
别人只是
some-random-text
和其他人又不同了……
从我的第一个示例中删除前 14 个字符的最快方法是什么?
while(<>) {
chomp;
s/^\d{6}_\d{6}_//; # so simple trying to substitute from every line
# and substitute will fail anyway when doesn't match
}
或
while(<>) {
chomp;
s/^.{14}// if m/^\d{6}_\d{6}_/; # with condition...
}
就速度(和正确性)而言,这并不重要...
【问题讨论】:
-
查看
Benchmark模块并亲自查看。 -
@mob 也许其他人会有同样的问题 - 但好吧 - 这也是一个答案......
-
我希望第一种形式(省略
if子句)运行得更快——但是,当然,没有基准测试就无法确定。 -
您为什么关心速度?你将不得不一遍又一遍地运行这个程序吗?我怀疑字符串操作方法的任何差异都会被读取数百万行文本的磁盘 I/O 相形见绌,所以你使用哪种技术并不重要。
-
@AndyLester,处理数百万行很糟糕。他希望它少吸一点。他不能通过减少数百万行来减少它的吸引力。渴望对常数因素进行“微观”优化的非常直接的理由——这些是他唯一可以优化的因素。是的,他会不止一次地运行它:这就是为什么他在这里,询问,而不是已经解决了其他问题。你只是在告诉他离开你的草坪。
标签: perl