CSVファイルのすべてのフィールドから重複パターン/アイテムを削除する

CSVファイルのすべてのフィールドから重複パターン/アイテムを削除する

次の例をデータとして使用して、個々のフィールドから重複項目を削除する方法。

0x,9.4,,,#0,#UNIX#unix,#cli#L#فا#0#فا#0#L#SE#Cli#SE,#فارسی#فارسی#۱#1#١#1,bsh,#V & v

期待される出力(すべての重複項目の削除、大文字と小文字を区別しない、Unicode「ペルシャ語/アラビア語」の違い、項目の順序、および維持する必要がある項目(大文字と小文字を無視する)はここでは重要ではありません):

0x,9.4,,,#0,#unix,#cli#L#فا#0#SE,#فارسی#١#۱#1,bsh,#V & v

パターンはこの形式を使用し、#x1つx以上の文字長を表します。

ペルシャ語/アラビア文字/数値差のUnicode表

ベストアンサー1

使うシェルのコマンドライン(わずか数行)に適していますパーサー:

perl -CS -Mopen=":std,IN,OUT,IO,:encoding(utf8)" -MText::CSV -lne '
    BEGIN{
        our $csv = Text::CSV->new({ sep_char => "," });
        sub uniq { my %seen;  grep !$seen{lc $_}++, @_; }
    };
    $csv->parse($_) or die "parse error";
    print join ",", map { join "#", uniq split /#/ } $csv->fields();
' file.csv

出力:

0x,9.4,,,#0,#UNIX,#cli#L#فا#0#SE,#فارسی#۱#1#١,bsh,#V & v

メモ:

  • Text::CSVPerlモジュールのインストールが必要:sudo apt-get install libtext-csv-perlDebianおよび派生製品用

おすすめ記事