我想删除所有包含一个字符串的行并只保留最后一行。
例如:
一个 1
一个 2
一个 3
乙 1
乙 2
我想删除:
a 1
a 2
b 1
,只保留最后几行:
a 3
b 2。
我在powershell中尝试了一些东西但没有成功:
gc 1.txt | sort | get-unique
我想删除所有包含一个字符串的行并只保留最后一行。
例如:
一个 1
一个 2
一个 3
乙 1
乙 2
我想删除:
a 1
a 2
b 1
,只保留最后几行:
a 3
b 2。
我在powershell中尝试了一些东西但没有成功:
gc 1.txt | sort | get-unique
假设您想要:
考虑在开头(a或b在您的示例中)共享相同单词的行作为组,
并返回每个此类组的最后一行,
使用Group-Objectcmdlet:
Get-Content 1.txt | Group-Object { (-split $_)[0] } | ForEach-Object { $_.Group[-1] }
{ (-split $_)[0] }使用属性表达式,通过脚本块 ( { ... },而不是属性名称作为分组标准。
-split $_通过空格将每个输入行 ( $_) 拆分为子字符串数组。
(...)[0]提取第一个标记,即行上的第一个空格分隔标记(a或b,在您的示例数据中)
至于您尝试了什么(显示您的命令扩展了别名):
Get-Content 1.txt | Sort-Object | Get-Unique
您的Sort-Object和Get-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