如何使用shell从文件中删除重复条目

时间:2012-04-17 23:38:05

标签: shell

我有一个格式为

的文件
0000000540|Q1.1|margi|Q1.1|margi|Q1.1|margi
0099940598|Q1.2|8888|Q1.3|5454|Q1.2|8888    
0000234223|Q2.10|saigon|Q3.9|tango|Q1.1|money

我正在尝试删除出现在同一行的重复项。

所以,如果一行有

0000000540|Q1.1|margi|Q1.1|margi|Q1.1|margi

我希望它是

0000000540|Q1.1|margi

如果该行

0099940598|Q1.2|8888|Q1.3|5454|Q1.2|8888

我希望它像

0099940598|Q1.2|8888|Q1.3|5454

我想在一个shell脚本上执行此操作,该脚本接收输入文件并输出没有重复项的文件。

提前感谢任何可以提供帮助的人

1 个答案:

答案 0 :(得分:1)

这应该这样做,但对于大文件可能效率不高。

awk '
    {
        delete p;
        n = split($0, a, "|");

        printf("%s", a[1]);

        for (i = 2; i <= n ; i++)
        {
                if (!(a[i] in p))
                {
                    printf("|%s", a[i]);
                    p[a[i]] = "";
                }
        }

        printf "\n";
    }
' YourFileName