如何删除分隔文本行中的dupes

时间:2016-02-25 05:13:29

标签: awk

在一条线上的分隔项目中删除欺骗(不一定是连续的)的智能和简单方法是什么。

在:

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的变体 - 用于用空行分隔的文本块。

2 个答案:

答案 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。