Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   сортировка (http://forum.oszone.net/showthread.php?t=301504)

user171078 22-06-2015 12:03 2521039

сортировка
 
как сделать сортировку по первому числу в batch file : ?
http://website/link 50 61
http://website/link2 24 61
http://website/link2 2 20
http://website/link2 16 20

хочу чтобы вышло:
http://website/link2 2 20
http://website/link2 16 20
http://website/link2 24 61
http://website/link 50 4

Foreigner 22-06-2015 14:24 2521088

Код:

@echo off
setlocal

for /f "tokens=1-3" %%i in (links.txt) do call:set %%i %%j %%k
for /f "tokens=2 delims==" %%i in ('set sort_') do echo %%i
goto:eof

:set

set /a num=100+%2
set sort_%num%=%*

Powershell:
Код:

gc links.txt | sort { $_.split()[1] }

Iska 22-06-2015 16:05 2521126

Цитата:

Цитата Foreigner
Powershell: »

Неа:
Цитата:

Код:

http://website/link2        16 20
http://website/link2        2 20
http://website/link2        24 61
http://website/link        50 61


Надо хотя бы преобразование добавить:
Код:

gc C:\Песочница\073\0001.txt | sort { [int]$_.split()[1] }
Или в Вашей версии PowerShell автоматом числовая сортировка отрабатывает?

Foreigner 22-06-2015 16:18 2521134

Цитата:

Цитата Iska
Надо хотя бы преобразование добавить »

У меня и так все нормально.. Но, согласен, не помешает

Iska 22-06-2015 16:24 2521144

Foreigner, у Вас версия, небось, уже четвёртая?

Foreigner 22-06-2015 16:50 2521162

Iska, Да (win 8.1)

Kazun 22-06-2015 17:08 2521171

В PowerShell v4 с сортировкой строк все осталось по-прежнему.

куда залить картинку

Foreigner 22-06-2015 17:22 2521178

Kazun, Я имел ввиду конкретный пример. В нем все нормально. Каюсь, был не прав, не обратил внимание, что строки разные.

Iska 22-06-2015 17:28 2521180

Foreigner, Kazun, тогда я перестал понимать :(.

Может быть — ещё от версии ОС зависит (я сталкивался однажды с таким поведением PowerShell — различное поведение одной и той же версии PowerShell с одной и той же версией .Net Framework в разных версиях ОС)?!

Update:
Цитата:

Цитата Foreigner
Kazun, Я имел ввиду конкретный пример. В нем все нормально. Каюсь, был не прав, не обратил внимание, что строки разные. »

Foreigner, так приведённый Вами выше пример у Вас отрабатывает всё-таки некорректно не так, как нужно, да?

Foreigner 22-06-2015 18:00 2521194

Iska, Конкретный пример списка, который дал user171078, отрабатывает как раз корректно, но это просто совпадение. Для других подобных случаев надо таки указывать тип, как вы правильно меня поправили.

ЗЫ. Меня просто сбил с толку результат, вроде все правильно, я и решил, что string преобразуется в int32

Iska 22-06-2015 20:19 2521246

Foreigner, так вот я и не пойму — у Вас именно на приведённом примере отрабатывает корректно, у коллеги Kazun (и у меня) на том же самом примере — нет. У Вас и у коллеги Kazun версия PowerShell вроде как одна и та же. Вот я и пытаюсь понять, как такое может быть.

Foreigner 22-06-2015 20:50 2521265

Iska, У меня так


Kazun 22-06-2015 21:50 2521273

Так понимаю разница копирования в файл. При копировать-вставить у меня `t, если изменить на пробелы, то получаем похожий результат.


Foreigner 22-06-2015 22:04 2521276

Kazun, Вообще как-то странно, при табуляции получается другой результат, сначала 16, а потом 2, даже если сделать так:
Код:

gc 1.txt | sort { $_.split("`t")[1] }
Чем пробел отличается от табуляции, как разделитель?

Kazun 22-06-2015 22:30 2521281

При табуляции происходит правильная сортировка строк. Выше я показал, что получается при split() - если есть пробелы, вместо табуляции и их разным расположением(как в строке 50, если расширить до 4 пробелов то будет другой результат).

Чем пробел отличается от табуляции, как разделитель? - Как минимум кодами.

Код:

PS >  [int][char]"`t"
9
PS >  [int][char]" "
32
PS >  " " -lt "`t"
True

Если привести к визуальному сходству:
Код:

PS >  "a`tb"
a      b
PS >  "a      b"
a      b
PS >  "a`tb".split().count
2
PS >  "a      b".split().count
8


Foreigner 22-06-2015 22:38 2521285

Понял, вопрос не в разделителе, а в их количестве.
Так отрабатывает корректно:
Код:

gc 1.txt | sort { ($_ -split '\s+')[1] } # сортируется как строка

Iska 22-06-2015 22:48 2521289

Ну, слава богу, разобрались. Теперь буду спать спокойно :).

Цитата:

Цитата Kazun
При копировать-вставить у меня `t, »

У меня тоже. Форум сохраняет табуляцию при оформлении тэгом «code».

Foreigner, а как у Вас так получилось скопировать, что вышли пробелы вместо имеющейся табуляции?

Foreigner 22-06-2015 22:53 2521293

Iska, У меня в FARе табуляция в редакторе заменяется пробелами.

Iska 23-06-2015 01:07 2521335

Цитата:

Цитата Foreigner
Iska, У меня в FARе табуляция в редакторе заменяется пробелами. »

Я, собственно, так примерно и предполагал, памятуя, что Вы пользуете Far Manager.

У меня — нет:
Скрытый текст
Код:

╔════════════════════════════ Редактор ═════════════════════════════╗
║ [ ] Запускать внешний редактор по F4 вместо Alt-F4                ║
║ Команда редактирования:                                          ║
║                                                                  ↓║
╟─────────────────────── Встроенный редактор ───────────────────────╢
║ Преобразовывать табуляцию:                                        ║
Не преобразовывать табуляцию                                    ↓
║ [ ] Постоянные блоки              [x] Del удаляет блоки          ║
║ [x] Сохранять позицию файла      [x] Сохранять закладки          ║
║ [ ] Автоотступ                    [x] Курсор за пределами строки  ║
║ 4  Размер табуляции              [x] Показывать полосу прокрутки ║
║ [x] Пробельные символы            [ ] Cлово под курсором          ║
║                                                                  ║
║ [x] Разрешить редактирование открытых для записи файлов          ║
║ [ ] Блокировать редактирование файлов с атрибутом R/O            ║
║ [x] Предупреждать при открытии файла с атрибутом R/O              ║
║ [x] Автоопределение кодовой страницы                              ║
║ [x] Использовать кодовую страницу ANSI по умолчанию              ║
║ [x] Использовать кодовую страницу ANSI при создании файлов        ║
╟───────────────────────────────────────────────────────────────────╢
║                        { OK } [ Отмена ]                        ║
╚═══════════════════════════════════════════════════════════════════╝


Другой вариант, если пользуете — плагин Editor's settings changer и его настройки преобразования табуляции в пробелы при сохранении.

user171078 23-06-2015 10:34 2521411

можно спросить как это сделать на PHP ?

Foreigner 23-06-2015 11:30 2521434

Цитата:

Цитата Iska
У меня — нет: »

Ну правильно, у вас "Не преобразовывать табуляцию", а у меня "Преобразовывать все символы табуляции в пробелы". Мне так удобней.

Iska 23-06-2015 13:45 2521475

Цитата:

Цитата Foreigner
Мне так удобней. »

А под какие цели и задачи? Не просто же так у Вас сие задано?!

Foreigner 23-06-2015 14:11 2521483

Iska, Не знаю, я просто так привык, без табуляции. А задач и целей связанных с IT у меня нет вообще, все эти батники для меня лишь разновидность кроссвордов. Не больше. Ну и средство автоматизации личного компьютера.

Iska 23-06-2015 14:55 2521494

Foreigner, спасибо, ясно.


Время: 00:29.

Время: 00:29.
© OSzone.net 2001-