То, куда Ваши помехи идут, зависит от того, если они инициализированы нулем или нет. инициализированный нулем статические данные входят .BSS (Блок, Запущенный Символом) , не инициализированный нулем , данные входят .DATA
Вот моя запись:
ls | sort {"$_"[-1]}
и чтобы получить патологию:
ls|sort{"$_"[-1]}
К сожалению, в Powershell нет удобного простого обратного метода, поэтому вместо этого вам нужно получить последнюю букву строки и отсортировать по ней. Это один из способов, которым я это сделал:
dir| sort {$_.name.Substring($_.name.length-1)}
Как уже указывалось, это будет сортироваться строго только по последней букве, тогда как версия для Linux будет сортировать по последней, а затем последующим буквам, так что может быть лучше способ сделать это, или вам, возможно, придется ввести некоторый цикл, если вы этого хотите.
Вариант Шэя намного короче принятого ответа за счет индексации в строке, но даже это можно улучшить. Вы можете сократить его еще больше, исключив ненужные пробелы и используя более короткий псевдоним:
ls|sort{$_.Name[-1]}
Также вы можете использовать (сокращенно) -Name
аргумент для Get-ChildItem
:
ls -n|sort{$_[-1]}
который вернет строки напрямую.
Если вы действительно хотите отсортировать по обратной строке, тогда работает (но медленно) следующее:
ls -n|sort{$_[3e3..0]}
Вы можете сделать это быстрее, если у вас есть верхняя граница от длины имени файла.
dir | sort -Property @{Expression ={$n = $_.Name.ToCharArray(); [Array]::Reverse($n);[String]::Join("",$n)}}
Не такой короткий, как версия unix, в основном потому, что в .NET Framework нет функции String.Reverse (). В основном это работает, сообщая sort «сортировать, вычисляя это выражение для входных аргументов».
Теперь, если какая-либо оболочка unix лучше, чем
dir | sort -Property Length -Descending
, напечатает сначала все файлы с самым большим размером, мне было бы интересно см.