在一行的分隔项中删除重复(不一定是连续的)是一种聪明而简单的方法。
以前:
apple,banana,apple,cherry,cherry
delta,epsilon,delta,epsilon
apple pie,delta,delta
后:
apple,banana,cherry
delta,epsilon
apple pie,delta
应该在 Mac 上工作。 允许 unicode。任何 shell 方法/语言/命令。重复不一定是连续的。
注意:这个问题是 如何从文本块中删除重复 - 适用于用空行分隔的文本块。
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/12,/g;s/,$//' file
apple,banana,cherry
delta,epsilon
apple pie,delta
只是代码。
$ 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