【问题标题】:Delete lines with reocurrences删除重复出现的行
【发布时间】:2014-02-28 12:21:56
【问题描述】:

如何更改文本文件,使其仅删除具有相同单词的行?

示例:

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

想要的输出

  1. 蓝绿黄
  2. 红橙棕

因为找到了green这个词,所以该行被删除了

【问题讨论】:

  • 那么如果前几行中的任何一个词在一行中找到,就必须删除?
  • 一行:foo bar foo 删除还是保留?你的真实输入文件有多大?
  • 输入文件是一个文本文件,有几行,每行大约 30 个字符。它有随机词,fedorqui 给出的描述是完美的。这就是我想要的

标签: bash shell


【解决方案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。 :-)

【讨论】:

  • 你是个巫师!你可以对函数“grep”或“sort”做同样的事情吗?因为我不太了解 perl...我认为您在 shell 中使用 perl。我所说的可能非常错误,但如果是这样,您能否只使用 shell 命令,例如 grep、sort 等?只是 bash 编程我很抱歉我一开始并不具体,我非常感谢你的回答
  • 我确信使用 shell 工具是可能的,但是使用 Perl oneliner 会容易得多。除了一些嵌入式系统之外,Perl 无处不在。我什至把它放在我的路由器上。
  • 非常感谢您的意见。你肯定展示了我不知道的东西。我会尝试投资 perl。
  • 其实awk是一个带有关联数组的shell工具,是解决问题的关键。但我不是很了解。
猜你喜欢
  • 2011-06-24
  • 2014-12-14
  • 1970-01-01
  • 2018-01-09
  • 2016-03-03
  • 1970-01-01
  • 2019-11-16
  • 1970-01-01
  • 2022-01-17
相关资源
最近更新 更多