2014-02-28 97 views
0

如何更改文本文件,以便仅擦除具有相同单词的行?删除重复的行

例如:

  1. 蓝绿黄
  2. 红橙棕色
  3. 紫色粉红色绿色

期望的输出

  1. 蓝绿黄
  2. 红橙棕色
  3. 因为找到绿字的

,行得一干二净

+0

因此,如果在一行中找到以前行中的任何单词,它必须被删除? – fedorqui

+2

如何行:'foo bar foo'移除或保留?你的真实输入文件有多大? – Kent

+0

输入文件是一个文本文件,每行包含大约30个字符。它有随机的单词和fedorqui给出的描述是完美的。这就是我想要的 – user3019617

回答

1
perl -ne 'my $p=1;@w=split;for(@w){$p=0 if $w{$_}}print if $p;$w{$_}=1 for(@w)' file 

绝招:我使用这两个数组@w当前行的话,哈希%w用于前面行中遇到的所有单词。 $p用于指示打印是必要的。

这将打印foo bar foo。 不是的版本更容易,但它作为OP的练习。 :-)

+0

你是一个巫师!你可以使用“grep”或“sort”功能吗? 因为我不明白perl所有这一切......我认为你正在使用Perl的壳。我在说什么时可能会出错,但如果是这样的话,你可以只使用shell命令,比如grep,sort等吗?只是bash编程 对不起,我一开始并不具体,我非常感谢你的回答。 – user3019617

+0

我确信shell工具是可能的,但使用Perl oneliner可以更容易。除了一些嵌入式系统外,Perl在任何地方都可用。我甚至在我的路由器上。 – SzG

+0

非常感谢你的输入。你肯定展示了我不知道的东西。我会尽力投资perl。 – user3019617