当前的流程:
- 我有一个
tar.gz
文件。(实际上,我有大约 2000 个这样的文件,但这是另外一个故事。) - 我创建一个临时目录,解压
tar.gz
文件,得到100,000个小文件(每个文件大小大约为600字节)。 - 针对每个文件,我将它传递给一个处理程序进行处理,将该循环传递给另一个分析程序,并保存结果。
我使用的机器上的临时空间几乎无法同时处理其中一个进程,更不用说默认情况下会发送16个(超线程双四核)。我正在寻找一种在不保存到磁盘的情况下执行此过程的方法。我认为单独使用 tar -xf $file -O <targetname>
来拉取文件的性能惩罚是禁止的,但这可能是我卡住的地方。
有没有什么方法可以做到这一点?
编辑:由于已经有两个人犯了这个错误,我要澄清一下:
- 每个文件代表一个时间点。
- 每个文件都是单独处理的。
- 处理后(在这种情况下是傅里叶分析的变种),每个文件会产生一行输出。
- 这些输出可以组合起来执行像跨时间的自相关之类的操作。
编辑2:实际代码:
for f in posns/*; do
~/data_analysis/intermediate_scattering_function < "$f"
done | ~/data_analysis/complex_autocorrelation.awk limit=1000 > inter_autocorr.txt
-xf
,而不是-xzf
吗?标题中提到了.tar.gz
,但如果您没有进行压缩,Python的tarfile
模块将能够在非流模式下打开文件并查找,从而使随机访问更加高效。 - Charles Duffy