awk 导致内存泄漏?

awk 导致内存泄漏?

我正在使用 awk 处理一个巨大的数据文件(大约 1 亿行)。

这就是我的表情——

tac <myfile> | awk -F',' 'OFS=\",\" {if(/^#/){print;}else{\$1=tolower(\$1);if(!seen[\$1]++)print;}}'|")

但是,我发现 awk 存在内存泄漏。有人可以指出这里的内存占用吗?

谢谢!

答案1

我相信,根据您提供的行数,您可能正在交换......

下面的 perl 脚本使用磁盘中的 B 树(这在数据库中很常见)作为数组 - 我们几乎不使用 RAM 内存。

$ cat remdup
#!/usr/bin/perl

use DB_File;
tie %seen, 'DB_File', "mydbfile.db", O_RDWR|O_CREAT|O_TRUNC ,0666, $DB_BTREE;

while(<>){
  if(/^#/)        { print; }
  elsif(/(.*?),/) { $a=lc($1);
                    print if( ! $seen{$a}++)}
}

无论如何,这将需要很长时间来处理(在我的 5 年旧笔记本电脑中处理 100 万行需要 16 秒)

用法:tac file | perl remdup > output

编辑:如果您运行任何解决方案,请告诉我们时间。

相关内容