복사본 하나만 유지하면서 파일의 선택한 필드 내에서 중복(또는 여러) 값을 제거하려면 어떻게 해야 합니까?
예
입력 파일:
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