我正在对大量文件进行一个又一个的排序。使用sort -o file file
。 for 循环中途停止,在重新启动之前我想使用 sort 的-c
选项来加速排序。但它说-co
选项不兼容。为什么会这样呢?
sort --version
sort (GNU coreutils) 8.13
OS: Ubuntu 12.10
答案1
因为您告诉它您只想 --check 不生成输出,并且您还指定您希望排序的 --output 转到某个文件。这些是互斥的概念,并且它们在 sort.c (gnu coreutils 8.20) 中强制执行
if (checkonly)
{
…
if (outfile)
{
static char opts[] = {0, 'o', 0};
opts[0] = checkonly;
incompatible_options (opts);
}
答案2
假设您正在使用 GNU sort
,您提到的选项可以:
-c, --check, --check=diagnose-first
check for sorted input; do not sort
-o, --output=FILE
write result to FILE instead of standard output
该-c
标志只会通知您输入是否已经排序:
$ echo -e "A\nB\nC" | sort -c
$ echo -e "A\nC\nB" | sort -c
sort: -:3: disorder: B
因此,如果输入已排序,则不会打印任何内容,如果输入未排序,则会将错误消息打印到标准错误。换句话说,sort -c
永远不会打印到标准输出。由于它从不打印,因此重定向其输出没有多大意义。
答案3
sort -c 从不产生输出。它只检查文件。如果没有输出,就没有理由将其写入文件。因此,与-o 不兼容。
您可以在对文件进行排序之前使用 -c 作为对文件的某种检查,但我不确定这实际上会像您想要的那样加快速度。
答案4
检查文件是否已排序和对其进行排序有很大的区别。
检查时,最好的情况是两个条目就足够了(相当快),在第一个未排序的条目处,命令可以退出并完成检查,但此时输出将不完整,最坏的情况是文件已排序(仅在这种情况下输出才有意义)。
如果您有很多文件需要排序并且经常发生中断,那么您可能应该在再次排序之前以某种方式跟踪已完成的文件。