Ещё о PowerShell
cat user-agents.log | sort -uодинаково работает и под bash и под PowerShell! Конечно, более «чистый» PowerShell выглядит как на листинге ниже:
Get-Content user-agents.log | Sort-Object -uniqueКоманда
Или вот, на bash не совсем похоже, но что проиходит догадаться просто:
ls | where {!$_.length} | %{rm $_}Читайте также
Powershell и объектный pipe
Я задумался над тем, чтобы показать как могла бы выглядеть обработка логов на PowerShell. Как я уже говорил, pipe в PowerShell объектный, то есть по нему идёт не монолитный текст, а набор объектов.
2010
Комментарии 15
cat access.log |grep 'GET /tratata' | cut -f1 -d' '|sort -u
Вот, если взять мой пример:
ls | where {!$_.length} | %{rm $_}
здесь команда ls возвращает набор объектов, я выделяю только те, у которых поле length равно нулю и удаляю только эти файлы. При этом работает, грубо говоря, toString — когда rm пытается получить строку из объекта, он получает имя этого объекта.
Точно так же можно сделать с логами. А можно и традиционно работать — как в bash'e.
cat access.log |
gc access.log | ?{$_ -like '*GET /tratata*'} | %{$_.Split()[1]} | sort -u
http://en.wikipedia.org/wiki/Cat_%28Unix%2 … use_of_cat
Неужели PowerShell так зафейлил идею? Или это вы им так пользуетесь?
Это не bash, там всё работает
Так что никакого useless cat тут нет, потому что нет того «cat», который упоминается в Википедии.
Но на то это ж и PHP, а не
open FH, '/var/log/apache2/access.log' or die «error: $!»;
@content = sort ;
В Perl функция sort() тоже не умеет читать файл, однако читать файл и возвращать данные оттуда массивом умеет оператор < >. Аналогично поступает bash, разбирая командную строку и обрабатывая перенаправления.
Так что — вход у
Нельзя что ли написать
Комментарий для jankkhvej.blogspot.com:
Из чего мы делаем вывод, что языки программирования разные и странной было бы ожидать от PowerShell поведения bash.
А чем операция „
То есть в языке, где cat — внешняя программа, такой синтаксис имеет кучу плюсов, в bash он «сахаром» не является. Внешняя программа cat прочитает файл, он сохранится в специальный временный файл, пойдёт по pipe и так далее.
В PowerShell
Комментарий для Евгения Степанищева:
О! Вот что мне и надо было, спасибо!
for i in $(cat list_users.csv); do
done
как аналогичное делается в ps?
Здрасьте!
Тут вы используете антипаттерн бесполезный «cat» (https://en.wikipedia.org/wiki/Cat_(Unix)#UUOC_(Useless_Use_Of_Cat)), выше в комментариях об этом писали, этого можно избежать, например, так:
На Повершелле аналог может выглядеть, например, так (в отличие от Баша, cat тут не внешняя программа, а командлет, алиасGet-Content) :
Я использую короткий синтаксис, но есть и более наглядный, посмотрите в руководстве. Было бы неплохо его вам вообще почитать, чтобы не задавать такие тривиальные вопросы.