2016-10-26 20 views
0

多くの列と数百の行を持つCSVがあります。列はCompanyName, Website, Address, PhoneNumber, Email1, Email2, Email3です。CSVで重複情報のある行を削除するにはどうすればよいですか?

私が必要とするのは、重複した情報を持つすべての行を削除することです。問題は、行が重複するためには、すべてのエントリが同一である必要はなく、少なくとも1つが同一である必要があることです。

ここでは、CompanyNameが異なる点を除いて、ほぼすべて同じ情報を持つ2つの行の例を示します。これはこの問題の1つの順列です。

enter image description here

だから、重要なことは、これらの行の1つが削除されるべき、基本的に1列に同じ値を共有する任意の2列です。

したがって、2つの行が同じCompanyName,Email Address,Phone Numberなどの場合は、1を削除する必要があります。

このアプローチにはどのような方法が最適ですか?

編集1

私は排除重複行を持つ新しい、変更されたCSVを作成好むだろう。主に既存のCSVに損害を与えたり、腐敗させたりするリスクはありません。

編集2

私が本当にやろうとしていますが、私は800行のCSVに他のすべての行に対して、各行を比較していますN + 1問題を回避されることに注意してください。それとも、私の目的があればそれはできないのですか?

+0

このデータはどうしていますか?それは一度だけですか、定期的にCSVをインポートしていますか? –

+0

@EduardoSampaioこのようなCSVを定期的にインポートします。私はこれらのCSVを作成するスクリプトを用意していますので、それらをサニタイズする方法を書いてみたいと思います。 – marcamillion

答えて

0

私は1つだけでsort(未テスト)を使用している、あなたのための2つの提案を持っている:

sort -u -t, -k1,1 -k2,2 (etc. one for each column you want unique) file 

それとも、このデータをデータベースにインポートする場合、あなたはそれに一時テーブルを作成することもできますし、どこすべての列は一意であり、一意の制約の例外を無視して、すべての列をCSVデータに挿入するだけです。

+0

データをデータベースにインポートしません。私はそれを別のCSVに保存したい。その 'sort'コマンドはRubyコマンドですか?あるいは、それは 'bash'コマンドなのでしょうか? – marcamillion

+0

sortはbashコマンドです –

+0

はい、 'sort'はbashコマンドです。 Rubyで 'sort'よりも優れた性能を持つアルゴリズムを書くことは本当に疑問です。 –

関連する問題