awkによってメモリリークが発生しますか?

awkによってメモリリークが発生しますか?

私は巨大なデータファイル(約1億行)を処理するためにawkを使用しています。

私の表現はこれです -

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

編集:ソリューションを実行している場合はいつ実行するか教えてください。

おすすめ記事