1

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

例如:

一个 1
一个 2
一个 3
乙 1
乙 2

我想删除:

a 1
a 2
b 1

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

我在powershell中尝试了一些东西但没有成功:

gc 1.txt | sort | get-unique
4

1 回答 1

0

假设您想要:

  • 考虑在开头(ab在您的示例中)共享相同单词的行作为组,

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

使用Group-Objectcmdlet:

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

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

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


至于您尝试了什么(显示您的命令扩展了别名):

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

您的Sort-ObjectGet-Unique调用都在full lines上运行,这不是您的意图:因为在 full考虑时所有行都是唯一的,它们都是输出

请注意,它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
于 2019-03-19T13:07:35.113 回答