使用vim删除unix中的重复字段

时间:2015-03-24 14:56:51

标签: unix vim

如果我在vi中有以下格式,但有数百个类别和数千个项目:

    Category1
    item
    Category1
    item
    Category1
    item
    Category2
    item
    Category2
    item
    Category2
    item

vi中是否有任何方式可以这样结束:

    Category1
    item
    item
    item
    Category2
    item
    item
    item

我需要删除除第一个类别之外的所有类别实例。我需要保留所有物品。 我尝试过补充和全球变化,但没有任何运气。非常感谢帮助,欢呼。

2 个答案:

答案 0 :(得分:0)

假设=在类别行的末尾....

将文件保存到(例如)foo.txt在Solaris上使用nawk,而不是awk。

awk '/=$/ && !arr[$0]++ {print; next}  {print $0} ' foo.txt > newfile.txt

对不起。我没有清楚的想法如何在没有大量打字工作或使用复杂的ed文件的情况下在vi / vim中执行此操作。其他人可能有想法。如果你完全陷入困境,请尝试以上方法。

答案 1 :(得分:0)

我的PatternsOnText plugin(以及其他):DeleteDuplicateLinesOf命令。假设可以通过尾随=检测类别(正如您在评论中指出的那样),此命令将执行:

:DeleteDuplicateLinesOf /=$/

与@ jimmcnamara的awk解决方案一样,这仍然假设相同的类别都在文件中按顺序出现;即它不会在项目周围移动,只是删除了重复的类别行。