Text-Processing

刪除 CSV 文件中每個欄位中的重複模式/條目

  • March 21, 2018

如何使用以下範例作為數據刪除每個單獨欄位中的重複條目。

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

模式採用這種格式#xx表示一個或多個字元長度的任何內容。

波斯語/阿拉伯語字母/數字差異的 Unicode 表

在帶有適當csv解析器的 shell 中使用perl命令行(只需幾行):

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-perl適用於 debian 和衍生產品

引用自:https://unix.stackexchange.com/questions/432151