- ベストアンサー
重複するデータを抽出できる秀丸マクロ
今、重複を含む長大なメールアドレスのリストを扱っています。(100万件以上あります) 一行に一アドレスで約100万行あるのですが、ここから重複している分を抽出したリストを作りたいと思っています。 Excelで開けないファイルですので、秀丸エディタのマクロで解決できないかな、と思っています。 自分でマクロを書いたことはないので、この用途に使えるマクロなど紹介していただけると助かります。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
100万行ではやっていませんが、以下のようなスクリプトを書いて実行すると、以下の結果が得られます。 スクリプト(dup.plの名前のファイルに格納します) -------------------- # 使用方法 # # perl dup.pl メールアドレスリストファイル # 機能:重複しているメールアドレスを表示する # 結果は画面に出力される。 #メールアドレスをテーブルに登録(件数もカウントする) while(<>){ chomp $_; $addr{$_} += 1; } #1つのメールアドレスが2件以上のものを出力する。 while( ($key,$val) = each(%addr)){ if ($val >= 2){ printf("重複メール=<%s> %d件\n",$key,$val); } } -------------------- メールアドレスのテキストをmail.txtとします。 内容は、以下の通りです。 -------------------------- xxxx1@yyy.co.jp xxxx2@yyy.co.jp xxxx3@yyy.co.jp xxxx4@yyy.co.jp xxxx5@yyy.co.jp xxxx@yyy.co.jp xxxx5@yyy.co.jp xxxx3@yyy.co.jp xxxx4@yyy.co.jp xxxx5@yyy.co.jp xxxx6@yyy.co.jp ---------------------- DOSプロンプトで perl dup.pl mail.txt とすると、 以下の結果が得られます。 ------------------------------ 重複メール=<xxxx5@yyy.co.jp> 3件 重複メール=<xxxx3@yyy.co.jp> 2件 重複メール=<xxxx4@yyy.co.jp> 2件 --------------------------------- この結果をファイルへ出力する場合は、 perl dup.pl mail.txt > out.txt とします。out.txtに結果が出力されます。 (perlをインストールしてperl.exeにパスを通す必要があります)
その他の回答 (2)
- tatsu99
- ベストアンサー率52% (391/751)
秀丸で100万行読み込ませるのは、できたとしても、そこから更に重複行の削除は、重いような気がします。 私が、回答できる保証はありませんが、 参考までに、1行のデータは、どのようになっていますか? また、各行には、かならず、メールアドレスがついてますか。 メールアドレスがついてない行もありますか。 できれば、何行かのサンプルを提示して下さい。(アドレスは、個人情報が漏れないように伏せ字にして下さい。) もし、perlをインストールしてもよいなら、perlで処理するのが、最短の解決方法のような気がします。(参考URLのperlをインストールします)
補足
ご回答有難うございます。 下記の通り補足させていただきます。 リストの形式は、 「一行に一つのメールアドレスのみ」 という簡単なテキストデータです。 他のデータが入った行やブランク行はありません。 perlのインストールも検討してみます。
- yambejp
- ベストアンサー率51% (3827/7415)
100万の単位であればSQLの出番ではないでしょうか?
お礼
やはり難しいでしょうか… ご回答有難うございました。
お礼
私もまだ大きなファイルで試していませんが、数万件のファイルでしたら問題なく処理が可能でした。大変参考になりました。 有難うございます!