删除所有包含重复单词的行

时间:2019-03-19 12:12:19

标签: powershell duplicates grouping

我想删除所有包含一个字符串的行,而只保留最后一行。

例如:

a 1
一个2
一个3
b 1
b 2

我要删除:

a 1
a 2
b 1

仅保留最后几行:
a 3
b 2。

我在Powershell中尝试了一些方法,但没有成功:

gc 1.txt | sort | get-unique

1 个答案:

答案 0 :(得分:0)

假设您要

  • 考虑在开始时(在示例中为ab)与组共享相同单词的行,

  • 并返回每个此类组的最后一行

使用Group-Object cmdlet:

Get-Content 1.txt | Group-Object { (-split $_)[0] } | ForEach-Object { $_.Group[-1] }
  • { (-split $_)[0] }通过脚本块({ ... }使用属性 expression ,而不是属性 name 作为分组标准

  • -split $_通过空白将每个输入行($_)分成子字符串数组。

  • (...)[0]提取第一个标记,即行中第一个用空格分隔的标记(示例数据中的ab


关于您尝试过的操作(显示带有扩展别名的命令):

  

Get-Content 1.txt | Sort-Object | Get-Unique

您的Sort-ObjectGet-Unique调用都在全行上操作,这不是您的意图:因为当完全考虑时,所有行都是唯一的,它们都是 all 输出。

请注意,Sort-Object有一个-Unique开关,因此以下内容将更接近到您想要的位置,但不允许您控制 相同的第一个单词返回的行:

# !! INCORRECT, because you don't control which of the duplicates
# !! is returned, given that sorting is based on only the *first* word
# !! on each line.
PS> Get-Content 1.txt | Sort-Object { (-split $_)[0] } -Unique
a 1
b 1