【问题标题】:Removing duplicate rows from Notepad++从记事本++中删除重复行
【发布时间】:2014-03-03 20:22:32
【问题描述】:

我正在寻找一种从我的 Notepad++ 文件中删除重复行的方法。每一行并不是完全重复的。这是情况。我还有一个包含概率值的大写公司名称的大文件(每个都由一个选项卡分隔)。所以格式是这样的:

ATT   .7213
SAMSUNG   .01294
SAMSUNG   .90222

因此,我需要删除其中一行,因为第一列中有匹配项。我真的不喜欢我需要删除哪一个,只要我最后得到一排。我尝试使用 TextFX 的唯一排序,但它正在寻找整行重复,而不仅仅是第一列。如果有人能提供一个方便的解决方案来解决这个问题,我将不胜感激。使用 awk、sed 或 cut 以及使用正则表达式的 Bash 脚本答案也是可以接受的。

谢谢!

【问题讨论】:

标签: regex bash notepad++


【解决方案1】:

使用awk,你可以说:

awk '!a[$1]++' filename

这将保留第一个字段具有唯一值的行。

【讨论】:

  • 由于这只会保留具有唯一值的那些,它会删除两个 SAMSUNG 行吗?
  • 它不会同时删除SAMSUNG 行;它宁愿保留第一个而忽略其余的。
  • 如果是这种情况,那么您在答案中的解释有点令人困惑。说它会 only 保留具有 unique 值的行意味着将 not 保留重复行的所有实例(因为第一个,其他的都是独一无二的)。
  • @Jon 第一次遇到三星行时,a[SAMSUNG] 的值为 0,取反后变为非零值,表示应打印该行。接受该行后,a[SAMSUNG] 会递增,这样将来a[SAMSUNG] 将始终具有非零值,当取反时变为 0,即拒绝该行。
  • 另一方面,这比我的答案更有效,因为它在 O(n) 时间内运行,而不是我的基于排序的答案所需的 O(n lg n)。跨度>
【解决方案2】:

使用sort:

sort -k1,1 -u companies.txt

输出将包含整行,但仅考虑排序键(第一个字段)来识别重复项。

【讨论】:

  • 谢谢你这工作完美,现在我有我需要的了。那么用 -k1 排序和指定关键字段 1,那么逗号后面的 1 到底是做什么的呢?我知道 -u 是为了要求唯一性。
  • -k1 本身使用字段 1 到记录末尾。例如,要对字段 2 到 5 进行排序,您可以使用 -k2,5-k1,1 将比较限制在第一个字段且仅第一个字段(因为它是一个元素范围)。
  • 好的,感谢您的友好和解释。很高兴知道它现在是如何工作的。
猜你喜欢
  • 2011-04-26
  • 2015-05-16
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 2013-07-18
相关资源
最近更新 更多