3

我有一个使用system调用对 tsv 文件进行排序的 Perl 脚本:

system("sort -k8 -r -n -t \$'\t' in.txt > out.txt");

它在 CentOS 和 SUSE Linux 中运行良好。但是在 Ubuntu 中,它给出了一个错误:

sort: multi-character tab `$\t'

似乎不同操作系统的问题对报价的解释不同。你有一个简单但更健壮的方法来在 Perl 中对 tsv 文件进行排序吗?

4

1 回答 1

3

通常,您会使用数组调用system来避免 shell,但是您在命令中有 I/O 重定向,这很难处理。OTOH,sort允许您使用 指定输出文件-o,命名文件可以是输入之一(尽管它不会在这里):

my @cmd = ( "sort", "-k8", "-rn", "-t", "\t", "-o", "out.txt", "in.txt" );

system(@cmd);

不调用 shell;选项卡没有损坏。我将-rand-n选项合二为一;如果您愿意,可以将它们分开,或者(在紧要关头)在-k8选项之后添加它们。

于 2012-04-03T02:53:29.247 回答