コピーを1つだけ保持しながら、ファイルの選択したフィールド内で重複(または複数)の値を削除するにはどうすればよいですか?
はい
入力ファイル:
A 1,2,3,45,1,8,2,3
B 5,6,6,6,6,6,2,3,7
予想出力:
A 1,2,3,45,8
B 5,6,2,3,7
答え1
一つずつsed
:
sed '
s/[^[:blank:]]\{1,\}/,&,/g;:1
s/\(\(,[^,[:blank:]]*\)\(,[^,[:blank:]]*\)*\)\2,/\1,/;t1
s/,\([^[:blank:]]*\),/\1/g'
(文字を含むすべてのフィールドを処理,
し、間隔を維持します)
答え2
そしてperl
:
perl -MList::MoreUtils=uniq -pe 's{\S*,\S*}{join ",", uniq split ",", $&}ge'
(文字を含むすべてのフィールドを処理,
し、間隔を維持します)
答え3
別の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
答え4
awk '{n=split($2, a, ","); $2=a[1];
for(i=2; i<=n; i++)
{$2 = ($2 ~ "(^|,)" a[i] "($|,)") ? $2 : ($2 "," a[i])}}1' OFS='\t' file