我有50万个文件,每个文件290 MB,其中大多数都是数字。我想(常规地)过滤掉这些数据,但是发现awk比解压缩要慢。例如,>
/usr/bin/time unlz4 bigfile.lz4 --stdout > /dev/null
0.20user 0.05system 0:00.44elapsed 57%CPU
/usr/bin/time unlz4 bigfile.lz4 --stdout | awk '{if ($26>120.) print}' > /dev/null
0.25user 0.25system 0:01.35elapsed 37%CPU
注意:
awk
在Ubuntu上是gawk 5.0.1
。mawk
而不是awk
。没什么不同。fscanf
读取数据。它比awk
慢得多。awk
都比unlz4
慢。lz4
文件都有大约66 MB(从290 MB压缩)。cat bigfile | awk '{if ($26>120.) print}' > /dev/null
我得出结论,使用lz4
这样的快速解压缩格式而不是更强和更慢的压缩格式都无济于事,因为即使使用awk
进行最简单的过滤也将成为瓶颈。
有人对此有任何见识或聪明的主意吗?有什么方法可以加快速度,还是我达到了身体极限?
我有50万个文件,每个文件290 MB,其中大多数都是数字。我想(常规地)过滤掉这些数据,但是发现awk比解压缩要慢。例如,/ usr / bin / ...
看来您的文件足够小,以至于启动时间是运行时的重要因素。简而言之,unzl4 | anything > /dev/null
总是比unlz4 > /dev/null
花费更长的时间,因为在处理可以发生之前,流水线的两端都需要启动。因此,在流水线情况下测量较大的时间并不一定意味着使用者比生产者慢,或者您选择的压缩算法无关紧要。如果要衡量更改压缩算法的影响,请更改压缩算法并进行测量!