Друг попросил меня сделать следующее:
«Найдите самый быстрый и простой способ сортировки списка каталогов по последнему символу имен файлов».
Он сделал это в Linux, используя следующее:
ls | rev | sort | rev
Я хотел бы показать ему альтернативу powershell, но я только начинаю изучать powershell и не могу этого сделать. Итак, я обманываю и прошу вашей помощи.
powershell
Ричард
источник
источник
Ответы:
К сожалению, в Powershell нет простого простого обратного метода, поэтому вместо этого вам нужно получить последнюю букву строки и отсортировать по ней. Это один из способов, которым я это сделал:
Как уже указывалось, это будет сортировать строго по последней букве, тогда как я версия Linux будет сортировать по последним и последующим буквам, так что может быть лучший способ сделать это, или вам, возможно, придется ввести некоторые циклы если ты так хочешь.
источник
Вы можете попробовать это:
источник
Не такая короткая, как версия для Unix, в основном потому, что в .NET Framework нет функции String.Reverse (). В основном это работает, говоря sort «сортировать путем вычисления этого выражения на входных аргументах».
Теперь, если какая-либо оболочка Unix работает лучше, чем
чтобы сначала распечатать все файлы с самым большим, мне было бы интересно его увидеть.
источник
Я уверен, что кто-то может сделать это лучше, но вот один способ, который полностью совместим с lynix. Его преимущество заключается в том, что вы можете использовать многоразовую
rev
строковую функцию для вашего набора инструментов, то есть сортировать всю строку, а не только последний символ:Я думаю, что foreach здесь хорошо демонстрирует, как каналы PowerShell являются массивами, а не просто строками, как в * nix.
Мне потребовалось немного времени, чтобы понять, что я должен использовать только,
$_
а не$_.name
внутри 2-гоforeach
. Итак, я узнал кое-что о вариациях содержимого массива от одного канала к другому.* Кредит на смелость моей функции rev идет на http://rosettacode.org/wiki/Reverse_a_string#PowerShell
Работает как Lynix:
Вроде работает как lynix, но очень-очень медленно:
Не работают как lynix, т.е. не сортируют все символы имен файлов; (сортирует только самый последний символ строки):
источник
ls | rev | sort | rev
полностью действительным самостоятельно. :-)Вариант Шей намного короче принятого ответа путем индексации в строке, но даже это можно улучшить. Вы можете сократить его еще больше, исключив ненужные пробелы и используя более короткий псевдоним:
Также вы можете использовать (сокращенно)
-Name
аргумент дляGet-ChildItem
:который будет возвращать строки напрямую.
Если вы действительно хотите отсортировать по обратной строке, то работает следующее (но медленно):
Вы можете сделать это быстрее, если у вас есть верхняя граница длины имени файла.
источник
источник