Предполагая, что вы хотите:
Рассмотрим строки, которые в начале имеют одно и то же слово (a
или b
в вашем примере) как группу,
и вернуть последнюю строку из каждой такой группы,
используйте командлет Group-Object
:
Get-Content 1.txt | Group-Object { (-split $_)[0] } | ForEach-Object { $_.Group[-1] }
{ (-split $_)[0] }
использует свойство выражение через блок сценария ({ ... }
, а не свойство name в качестве критерия группировки.
-split $_
разбивает каждую входную строку ($_
) на массив подстрок по пробелу .
(...)[0]
извлекает 1-й токен, то есть первый разделенный пробелами токен в строке (a
или b
, в ваших данных выборки)
Что касается того, что вы пытались (показывает вашу команду с расширенными псевдонимами):
Get-Content 1.txt | Sort-Object | Get-Unique
Ваши вызовы Sort-Object
и Get-Unique
работают на полных строках , что не является вашим намерением: поскольку все строки уникальны, если рассматривать в полном объеме , они все выход.
Обратите внимание, что 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