在一条线上的分隔项目中删除欺骗(不一定是连续的)的智能和简单方法是什么。
在:
apple,banana,apple,cherry,cherry
delta,epsilon,delta,epsilon
apple pie,delta,delta
在:
apple,banana,cherry
delta,epsilon
apple pie,delta
应该在Mac上运行。允许unicode。任何shell方法/语言/命令。 Dupes不一定是连续的。
注意:此问题是How to remove dupes from blocks of text的变体 - 用于用空行分隔的文本块。
答案 0 :(得分:1)
$ awk 'BEGIN { FS=OFS="," }
{
delete seen
sep=""
for (i=1;i<=NF;i++) {
if (!seen[$i]++) {
printf "%s%s", sep, $i
sep = OFS
}
}
print ""
}' file
apple,banana,cherry
delta,epsilon
apple pie,delta
答案 1 :(得分:1)
awk -F, '{ for(i=1;i<=NF;i++) if( split($0,t,$i)>2 ) sub($i",","") }1' file
banana,apple,cherry
delta,epsilon
apple pie,delta
sed版本:
sed -r 's/(.+)(.*),\1/\1\2,/g;s/,$//' file
apple,banana,cherry
delta,epsilon
apple pie,delta
Just Code。