2017-04-05 57 views
0

我正在尝试将大量文件传输到一系列命令中,这些命令显示所述文件的给定列中唯一条目的数量。我没有经验与外壳,但经过短暂的,而我能想出这样的:显示一组文件中唯一列条目数的高性能方法?

awk '{print $5 }' | sort | uniq | wc - l 

命令序列工作正常的文件量小,但需要不可接受的时间量执行我的目标集。是否有一组命令可以更高效地完成此操作?

+0

您可以使用'sort -u'而不是'sort | uniq'。 –

+0

关于您实际尝试处理多少行输入?你能否包含一点样本输入数据,以便我们看到你真正想要做什么?请在您提供的样本输入中包含您的预期输出。您是否正在寻找EACH文件第5列或所有文件中的独特项目? – ghoti

回答

1

可以以单次通过的计数值的唯一出现在第五字段AWK:

awk '{if (!seen[$5]++) ++ctr} END {print ctr}' 

这将在第五字段中的值的阵列,并且递增ctr变量如果值从来没有前面看过。 END规则打印计数器的值。

随着GNU AWK,则可以选择只检查到底关联数组的长度:

awk '{seen[$5]++} END {print length(seen)}' 
1

本杰明已经提供了好油,但是这取决于到底有多少数据被存储在用awk但是从以前的版本@BenjaminW的不远处

awk '!_[$5]++' file | wc -l 
1

的sortest和最快的(我可以):阵列,它可以支付来传递数据反正厕所。我想快一点(差只能是有趣的很巨大的文件),因为测试

awk '!E[$5]++{c++}END{print c}' YourFile 

作品与所有的awk版本

0

GNUdatamash在这个过程中早些时候已经一个计数功能列:

datamash -W count 5