【发布时间】:2012-04-16 16:55:39
【问题描述】:
我有一个 Perl 脚本,它使用 system 调用对 tsv 文件进行排序:
system("sort -k8 -r -n -t \$'\t' in.txt > out.txt");
它在 CentOS 和 SUSE Linux 中运行良好。但是在 Ubuntu 中,它给出了一个错误:
sort: multi-character tab `$\t'
似乎不同操作系统的问题对报价的解释不同。你有一个简单但更健壮的方法来在 Perl 中对 tsv 文件进行排序吗?
【问题讨论】:
-
我咬一口:你为什么使用系统排序命令而不是内部 Perl 排序命令? Perl 排序将更快、更高效,并且适用于所有操作系统——甚至是 Windows。
-
大卫,我正在考虑将文件加载到数组中,对其进行排序,然后将其写出。这很麻烦。此外,对文件进行排序不是我程序中的瓶颈,所以我只是采取简单的方法。或者你有简单有效的方法吗?谢谢。
-
区别在于ubuntu的
/bin/sh是dash,而不是bash。$'\t'是一个bashism。 -
@DavidW。是什么让您认为 perl 排序会更快?系统排序非常快,并且不限于内存数据集大小。 Perl 不是速度恶魔,与以较低抽象级别编写的程序相比,它是一个具有大量开销的 HLL。
-
@dberhur 有几篇关于speed of Perl's sorting algorithm vs. the command line sort 的帖子。如果 OP 针对这种特殊情况编写了自己的 C 排序程序,它会比 Perl 更快,但 Unix 排序命令是为了灵活性而编写的。与我认为的简单编译的 Unix 系统命令相比,Perl 的速度让我感到惊讶。
标签: perl sorting system-calls tsv