2013-04-04 132 views
7

我的工作涉及很多来自超大文件的排序字段。我通常用bash中的sort命令来做到这一点。不幸的是,当我开始进行排序时,我不知道要花多长时间。我是否应该等待一秒才能显示结果,还是应该在运行时开始处理其他问题?是否有可能在Linux中显示排序的进度?

是否有任何可能的方法来了解排序进度有多远或运行速度有多快?

$ cut -d , -f 3 VERY_BIG_FILE | sort -du > output 
+2

它正在'平坦'。没有一种可靠的方法来检测它已经发展的程度以及运行的时间。你可能可以绕过/ proc进行排序并作一些推论,但可能不会。 – 2013-04-04 15:48:43

+0

也许另一种排序例程呢?大多数排序例程(比如QuickSort)至少对排序有多大意见。 – 2013-04-04 15:59:48

回答

8

不,GNU sort不会进行进度报告。

但是,如果您使用的sort只是为了删除重复,你不真正关心的排序,然后有这样做的一个more scalable way

awk '! a[$0]++' 

此写出的第一次出现只要看到它,就可以让你了解进展情况。

-4

您可以在后台执行 你“之类的”,你会得到提示,你可以做其他的工作

$排序...... &#(&在后台运行机构)

+3

尽管您的陈述无疑是正确的,但您的答案与问题无关。 – tink 2013-04-04 17:29:18

1

你可能想要尝试pv,它应该能够让您很好地了解管道中吞吐量的变化。

例(未经测试)前后sort命令后注入pv获得吞吐量的想法:

$ cut -d , -f 3 VERY_BIG_FILE | pv -cN cut | sort -du | pv -cN sort > output 

编辑:我错过了你的sort命令的-u,所以计算行先能够获得百分比输出是无效的。从我的答案中删除了该部分。

+0

虽然'pv'是一个很好的工具,它只是给出了一个想法,如果你给它一个'-s'选项来告诉它它的总长度,我们真的有多远。 – glglgl 2013-04-05 08:06:11

+0

@glglgl我的示例在编辑之前使用了'-s',但是因为在排序后我们无法知道大小,所以我删除了它。 OP要求提供一个解决方案,至少有助于确定_“它的工作速度有多快_”,这在某种程度上是“pv”的作用。 – 2013-04-05 08:26:58

相关问题