我想删除所有包含一个字符串的行,而只保留最后一行。
例如:
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
答案 0 :(得分:0)
假设您要
考虑在开始时(在示例中为a
或b
)与组共享相同单词的行,
并返回每个此类组的最后一行
使用Group-Object
cmdlet:
Get-Content 1.txt | Group-Object { (-split $_)[0] } | ForEach-Object { $_.Group[-1] }
{ (-split $_)[0] }
通过脚本块({ ... }
使用属性 expression ,而不是属性 name 作为分组标准
-split $_
通过空白将每个输入行($_
)分成子字符串数组。
(...)[0]
提取第一个标记,即行中第一个用空格分隔的标记(示例数据中的a
或b
)
关于您尝试过的操作(显示带有扩展别名的命令):
Get-Content 1.txt | Sort-Object | Get-Unique
您的Sort-Object
和Get-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