删除字段中的重复值

dov*_*vah 5 awk

如何删除文件中选定字段中的重复(或更多)值,只保留一个副本?

例子

输入文件:

A    1,2,3,45,1,8,2,3
B    5,6,6,6,6,6,2,3,7
Run Code Online (Sandbox Code Playgroud)

预期输出:

A    1,2,3,45,8
B    5,6,2,3,7
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 5

一个sed一个:

sed '
  s/[^[:blank:]]\{1,\}/,&,/g;:1
  s/\(\(,[^,[:blank:]]*\)\(,[^,[:blank:]]*\)*\)\2,/\1,/;t1
  s/,\([^[:blank:]]*\),/\1/g'
Run Code Online (Sandbox Code Playgroud)

(它处理所有包含,字符的字段并保留间距)


cuo*_*glm 2

另一个perl解决方案:

perl -anle '                                                                    
    print "$F[0] ", join ",", grep {!$seen{$_}++} split ",",$F[1];              
    %seen=();                                                                   
' file
A 1,2,3,45,8
B 5,6,2,3,7
Run Code Online (Sandbox Code Playgroud)